我有这个发现
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,请你解释一下,我可以尝试学习
答案 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