为什么我的脚本的 copy_with_index_addition() 不起作用?

问题描述 投票:0回答:1

我有一个任务,我应该制作一个 bash 脚本,该脚本将在目标文件夹及其包含的文件夹中查找特定扩展名的任何文件。我编写了将 _i 索引附加到文件以避免冲突的函数,但它似乎不起作用。它仍然只是覆盖文件。我该怎么做才能让它发挥作用?

#!/bin/bash

copy_with_index_addition() {
  if [ -f "$2/$1" ]
  then
    echo 1    
    base_name=$(basename "$1" .$3)
    i=1
    new_name="${base_name}_$i.$3"
    while [ -f "$2/${new_name}" ] 
    do
      (( ++i ))
      new_name="${base_name}_$i.$3"
    done
    cp "$1" "$2/${new_name}"
  else
    cp "$1" "$2"
  fi
}

while [ $# -gt 0 ]
do 
  case $1 in
    --input_folder)
    input_folder=$2
    shift 2
    ;; 

    --extension)
    extension=$2
    shift 2
    ;;
    
    --backup_folder)
    backup_folder=$2
    shift 2
    ;;

    --backup_archive_name)
    backup_archive_name=$2
    shift 2
    ;;
  esac
done

export -f copy_with_index_addition
mkdir "$backup_folder"
find "$input_folder" -name "*.$extension" -type f -exec bash -c 'copy_with_index_addition "$1" "$2" "$3"' bash {} "$backup_folder" "$extension" \;
tar --create --gzip --file="$backup_archive_name" "$backup_folder"

echo 'done'

使用示例:./run.sh --input_folder Search --backup_folder save --backup_archive_name save.tar.gz --extension cpp

我没有得到包含 file.cpp、file_1.cpp 等的保存文件夹,只有 file.cpp 作为脚本的结果出现。测试正确

linux bash scripting
1个回答
0
投票

我想你可以在这里修改两行。

mkdir -p "$backup_folder"

find "$input_folder" -name "*.$extension" -type f -exec bash -c 'source /path/to/script.sh; copy_with_index_addition "$1" "$2" "$3"' bash {} "$backup_folder" "$extension" \;

我删除了

export -f
,因为它明确导出了它,所以添加了
source /path/to/script.sh
,这可能更常见并且通常是首选。

© www.soinside.com 2019 - 2024. All rights reserved.