移动照片并重命名(如果存在)?

时间:2015-10-18 09:51:39

标签: linux bash

我尝试使用find将照片从目录移动到一个目录。效果很好:

find /origin/path \( -iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.JPG' -o -iname '*.JPEG' -o -iname '*.PNG' -o -iname '*.png' -o -iname '*.gif' -o -iname '*.GIF' \) -type f -exec mv -nv -t /final/path -- {} +;

如果文件名称相同(但照片不同),如何重命名文件?

2 个答案:

答案 0 :(得分:3)

您可以将--backup=t选项用于mv。这将为目标已存在的文件附加增加编号的后缀。

$ find /tmp/test -type f
/tmp/test/dir2/image.jpg
/tmp/test/dir3/image.jpg
/tmp/test/dir1/image.jpg
/tmp/test/dir4/image.jpg
$ mkdir /tmp/test2
$ find /tmp/test -iname '*.jpg' -print0 | xargs -0 mv -v --backup=t --target-directory=/tmp/test2
‘/tmp/test/dir2/image.jpg’ -> ‘/tmp/test2/image.jpg’
‘/tmp/test/dir3/image.jpg’ -> ‘/tmp/test2/image.jpg’ (backup: ‘/tmp/test2/image.jpg.~1~’)
‘/tmp/test/dir1/image.jpg’ -> ‘/tmp/test2/image.jpg’ (backup: ‘/tmp/test2/image.jpg.~2~’)
‘/tmp/test/dir4/image.jpg’ -> ‘/tmp/test2/image.jpg’ (backup: ‘/tmp/test2/image.jpg.~3~’)
$

答案 1 :(得分:0)

抱歉,我没有,因为我现在在Windows上,但在脚本之下应该这样做

files_list=$(find /origin/path \( -iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.JPG' -o -iname '*.JPEG' -o -iname '*.PNG' -o -iname '*.png' -o -iname '*.gif' -o -iname '*.GIF' \) -type f)

for file in ${files_list}
do
    counter=0
    while true
    do
        if [[ ! -a ${file} ]]
        then
            mv "${file}" "/final/path/${file}"
            break
        else
            file="${file}${counter}"
            (( counter++ ))
        fi
    done
done