画像のコピーと名前変更

画像のコピーと名前変更

私はManjaro Gnu / Linuxを使用しており、filesこのディレクトリの下にはdir1、、、、...dir2などの名前を持つ約650のサブディレクトリがあります。dir3dir4

各サブディレクトリには異なる数の.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.jpgforループでいくつかの調整を行います。

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 {} +

おすすめ記事