すべてのサブディレクトリのすべてのファイル名を変更する

すべてのサブディレクトリのすべてのファイル名を変更する

サブディレクトリ名と自動番号付けを使用して、すべてのサブディレクトリのすべてのファイル名を変更する方法。

前任者:

parent
-subdir
--file.jpg
--cat.jpg
--dog.jpg

名前変更:

parent
-subdir
--subdir_01.jpg
--subdir_02.jpg
--subdir_03.jpg

このスクリプトを使用していますが、再帰的ではありません。

#!/bin/bash
a=1
b="$1"
for i in *.jpg; do
  new=$(printf "%04d" ${a}) #04 pad to length of 4
  mv "${i}" ""$1"_${new}.jpg"
  let a=a+1
done

ベストアンサー1

この文は可能です:

find path/ -name '*.jpg' -exec bash -c 'dn=$(dirname "$1"); bn=$(basename "$dn"); c=$(ls "$dn/$bn"_??.jpg 2>/dev/null | wc -l); c=$((c+1)); cnt=$(printf "%02d" $c); mv "$1" "$dn/${bn}"_$cnt.jpg' -- {} \;

読みやすくするために行が分割されました。

find path/ -name '*.jpg' -exec bash -c '\
  dn=$(dirname "$1"); bn=$(basename "$dn"); \
  c=$(ls "$dn/$bn"_??.jpg 2>/dev/null | wc -l); c=$((c+1)); \
  cnt=$(printf "%02d" $c); mv "$1" "$dn/${bn}"_$cnt.jpg' -- {} \;

おすすめ記事