复制和重命名图像

复制和重命名图像

我正在使用 Manjaro Gnu/Linux,并且有一个名为files.在这个目录下,我有大约 650 个子目录,名称如下:dir1, dir2, dir3, dir4, ...

每个子目录下都有不同数量的.jpg图像(例如,从 2 到 11)。举个例子,在dir1子目录下,图像是imgaf001.jpgsrep0001.jpg

我想编写一个命令/脚本将所有此类图像复制到新的目录名称,all_images以便将图像重命名为其子目录的名称。

例如:对于dir1子目录,imgaf001.jpg更改为dir1_1.jpgsrep0001.jpg更改为dir1_2.jpg(下划线后面是图像的计数)。

我怎样才能实现这个目标?

谢谢

答案1

您可以在名为的目录中运行此脚本files

mkdir all_images
find -type f -name '*.jpg' -exec sh -c '
    c=1
    for f in "$@"; do
        pdir=${f%/*}
        pdir=${pdir##*/} #Now pdir conains the parent directory name
        cp -- "$f" "all_images/${pdir}_${c}.jpg"
        c=$((c+1))
    done
' findsh {} +

带有图像的示例目录:

$ ls dir*
dir1:
asj.jpg  assa.jpg

dir2:
kasj.jpg  kkl.jpg

脚本执行后:

$ ls all_images/
dir1_1.jpg  dir1_2.jpg  dir2_3.jpg  dir2_4.jpg

如果您希望计数器在源目录更改时重新启动,以便结果为dir1_1.jpg dir1_2.jpg dir2_1.jpg dir2_2.jpg,则在 for 循环中进行一些调整:

mkdir all_images
find -type f -name '*.jpg' -exec sh -c '
    for f in "$@"; do
        pdir=${f%/*}
        pdir=${pdir##*/} #Now pdir conains the parent directory name
        [ "$pdir" != "$oldpdir" ] && c=1
        cp -- "$f" "all_images/${pdir}_${c}.jpg"
        oldpdir=$pdir
        c=$((c+1))
    done
' findsh {} +

相关内容