По крайней мере, одна раковина, рыба, не демонстрирует такого поведения (, но тогда рыба необычна в других отношениях):
% 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.)
Вы можете запустить этот скрипт в каталоге с именем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 {} +