find /home/csuser/testfiles . -type f -name "*.c" -exec mv '{}' /home/csuser/src/ ;
上面的命令将简单地覆盖具有相同名称的文件。对于目标中已经存在的每个文件名,如何使mv
提示我覆盖现有文件或替换它?
mv
命令(man mv
(的手册页显示以下条目:
-i, --interactive
prompt before overwrite
因此,在重写之前使用mv -i ...
提示。
这里有一个简单的shell脚本包装器,用于提示您输入每个现有文件。
find /home/csuser/testfiles . -type f -name "*.c" -exec sh -c '
for file; do
dest=$0/${file##*/}
if [ -e "$dest" ]; then
ls -ld "$dest" "$file"
read -p "Enter new name for the second, or just ENTER to overwrite the first: " newname
if [ "$newname" != "" ]; then
dest=$0/${newname##*/}
fi
fi
mv "$file" "$dest"
done' /home/csuser/src/ {} +
我们模糊但方便地将目标目录作为$0
传递。