我有这个发现
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:菜鸟,请您解释一下,以便我可以尝试学习
我假设您的文件名不包含任何空格。它使事情变得更容易。
您可以将 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