在 Linux 中备份命令更改文件类型

在 Linux 中备份命令更改文件类型

我正在浏览一个目录并将显示文件扩展名的图像复制到一个新文件夹。但是有些图像有相同的名称,所以我使用备份命令。

我在重命名和复制时遇到的问题是文件类型从图像变为回收徽标(我不确定这是什么意思)。

另外,是否可以将文件“image_2101.JPG”重命名为“image_2101.JPG.JPG”,而不是在复制时只输入 .~1~

find /root/folder/images \( -name  '*.png' -o  -name '*.jpg' -o -name '*.JPG' \) -exec cp --backup=numbered -t/root/folder/CopiedImages {} +

答案1

cp --backup将备份扩展分配~给文件并且numbered选项使其使用~1~~2~等等,所以为了改变它,您必须创建一个脚本来改变行为。

此脚本将创建每个图像的副本sourcefolder到单个文件夹目标(将不是创建任何子目录),通过在文件扩展名前附加一个数字来避免冲突。请注意,每次运行时,它都会复制每个文件,就像您的脚本一样。while IFS带空格的文件名需要此部分。

sourcefolder="/root/folder/images"
destinationfolder="/root/folder/CopiedImages"
find "${sourcefolder}" \( -name  '*.png' -o  -name '*.jpg' -o -name '*.JPG' \) -print0 | while IFS= read -r -d $'\0' img; do
    imgname="${img##*/}"
    ext="${imgname##*.}"
    noext="${imgname%.*}"
    destname="${destinationfolder}/${noext}.${ext}"
    count=0
    while [ -f "${destname}" ] ; do
        count=$((count+1))
        destname="${destinationfolder}/${noext}.${count}.${ext}"
    done
    cp "${img}" "${destname}"
done

相关内容