查找并复制,重命名具有相同名称的文件

时间:2013-11-14 14:17:27

标签: bash find

我有这个发现

find "$source_folder" -name "IMG_[0-9][0-9][0-9][0-9].JPG" -exec cp {} $destination_folder \;

我只想要IMG_ [0-9] [0-9] [0-9] [0-9] .JPG,在源文件夹中有不同的同名文件,同名的文件相同,如何复制所有内容并使用额外的.JPG重命名所有相同的名称文件而不删除任何唯一文件? PS:noob,请你解释一下,我可以尝试学习

1 个答案:

答案 0 :(得分:0)

我假设您的文件名不包含任何空格。它使事情变得更容易。

您可以将find命令的输出传递给一个循环,您可以在其中运行某些测试,无论您是否要复制该文件。

我必须确定文件的名称以及文件的复制位置。为了做到这一点,我必须从我找到的文件的名称中删除$source_folder,并添加$dest_folder的名称。这是我想要实际复制文件的地方。

您的指示有点令人困惑。如果$dest_file不存在或与源不同,我假设你正在复制。一旦我确定这是您要复制的文件,我必须确保目标目录存在,如果不存在,我就创建它。现在,我可以复印了。

我在这里有两个echo语句。这样,您可以执行此脚本的 dry run 以确保它正在执行您希望它执行的操作。如果看起来不错,可以从两行中删除echo命令并重新运行脚本。

find "$source_folder" -name "IMG_[0-9][0-9][0-9][0-9].JPG" | while read file_name
do
     rootname=${file_name#$source_folder/}  # Removes the source folder from the name
     dest_name="${dest_folder}/$rootname"

     if [ ! -e "$dest_name" ] || [ ! diff "$file_name" "$dest_name" > /dev/null 2>&1 ]
     then
        $dest_folder=$(basename $dest_name)
        [ ! -d "$dest_folder" ] && echo mkdir -p "$dest_folder" #Remove echo if it works
        echo cp "$file_name" "$dest_name"   #Remove 'echo' if it works
     fi
done