我试图将所有子文件夹中某个文件类型的所有文件复制到一个位置。不幸的是,如果两个文件具有两个不同子文件夹中的相同名称,则可能会导致冲突。
我正在使用
find ./ -name '*.jpg' -exec mv -u '{}' . \;
如何调整此项以自动重命名文件(例如附加“_1”)以避免冲突。 或者更好:事先检查文件是否相同(例如相同大小)。如果是,请忽略(覆盖也没关系)。如果否,重命名以避免碰撞。
建议将不胜感激。谢谢!
答案 0 :(得分:0)
您可以在移动每个单独的文件之前进行检查。在这里,我使用cksum
进行比较,它返回文件大小和简单的校验和。
find ./ -name '*.jpg' -print0 |
while read -d '' -r path; do
file=$(basename "$path")
if [[ -e $file ]]; then
if [[ $(cksum "$file" | awk '{print $1 $2}') = $(cksum "$path" | awk '{print $1 $2}') ]]; then
continue
fi
read -n 1 -p "File '$file' would be overwritten by '$path', continue? (y/N) " -r prompt </dev/tty
if [[ $prompt != [Yy] ]]; then
continue
fi
fi
mv -f -v "$path" "$file"
done