我有一个任务,我应该制作一个 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 作为脚本的结果出现。测试正确
我想你可以在这里修改两行。
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
,这可能更常见并且通常是首选。