我正在使用 Manjaro Gnu/Linux,并且有一个名为files
.在这个目录下,我有大约 650 个子目录,名称如下:dir1
, dir2
, dir3
, dir4
, ...
每个子目录下都有不同数量的.jpg
图像(例如,从 2 到 11)。举个例子,在dir1
子目录下,图像是imgaf001.jpg
和srep0001.jpg
。
我想编写一个命令/脚本将所有此类图像复制到新的目录名称,all_images
以便将图像重命名为其子目录的名称。
例如:对于dir1
子目录,imgaf001.jpg
更改为dir1_1.jpg
并srep0001.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 {} +