Копирование и переименование изображений

По крайней мере, одна раковина, рыба, не демонстрирует такого поведения (, но тогда рыба необычна в других отношениях):

% for sh in zsh mksh fish dash bash tcsh; do echo 'sleep 5' > foo.$sh; $sh foo.$sh & sleep 1; echo 'echo $0' >> foo.$sh; fg; done
[2] 7381
[2]  - 7381 running    $sh foo.$sh
foo.zsh
[2] 7385
[2]  - 7385 running    $sh foo.$sh
foo.mksh
[2] 7387
[2]  - 7387 running    $sh foo.$sh
[2] 7390
[2]  - 7390 running    $sh foo.$sh
foo.dash
[2] 7393
[2]  - 7393 running    $sh foo.$sh
foo.bash
[2] 7415
[2]  - 7415 running    $sh foo.$sh
foo.tcsh

(В предыдущей версии этого ответа были ошибочные наблюдения за Python и Ruby.)

0
14.05.2020, 17:11
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 {} +
1
28.04.2021, 23:14

Теги

Похожие вопросы