私はManjaro Gnu / Linuxを使用しており、files
このディレクトリの下にはdir1
、、、、...dir2
などの名前を持つ約650のサブディレクトリがあります。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 {} +