0

我有这个发现

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:菜鸟,请您解释一下,以便我可以尝试学习

4

1 回答 1

0

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

您可以将 find 命令的输出通过管道传输到循环中,无论您是否要复制文件,都可以在其中运行一些测试。

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

你的方向有点混乱。$dest_file如果不存在或与源不同,我假设您正在复制。一旦我确定这是您要我复制的文件,我必须确保目标目录存在,如果不存在,我将创建它。现在,我可以复印了。

echo在这里有两个陈述。这样,您可以对该脚本进行试运行,以确保它正在执行您希望它执行的操作。如果看起来不错,您可以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
于 2013-11-14T16:13:20.043 回答