数値名でフォルダを繰り返すスクリプト

数値名でフォルダを繰り返すスクリプト

WordPressフォルダの画像を圧縮するためのbashスクリプトを作成しています。 WordPressフォルダ構造は次のとおりです。

> wp-content/uploads/2014/01/filename.jpg
> wp-content/uploads/2014/02/filename.jpg
> wp-content/uploads/2014/03/filename.jpg
> wp-content/uploads/2014/04/filename.jpg
> 
> i.e. wp-content/uploads/YEAR/MONTH/filename.jpg

アップロードフォルダには他のフォルダ(プラグインのインストール時に作成されます)がたくさんあるため、数字名のフォルダのみを循環してから画像を圧縮してみました。これが私が今まで持っているものです:

DIR_UPLOADS=/home/html/wp-content/uploads/
cd ${DIR_UPLOADS}    
for d in *; do                 # First level i.e. 2014, 2013 folders.
     regx='^[0-9]+$'           # Regular Expression to check for numerics.
     if [[$d =~ $regx]]; then  # Check if folder name is numeric.
       #echo "error: Not a number" >&2; exit 1
       cd $d
       for z in *; do          # Second level i.e. the months folders 01, 02 etc.
        cd $z
        for x in *; do         # Third level the actual file.              
          echo 'Compress Image'
        done
      done
     fi
    done

数値フォルダを検出するためにreg exを使用しようとしていますが、これは正確ではありませんが、ほぼ近いようです。

ベストアンサー1

bashこれには拡張ワイルドカードを使用できます。

shopt -s extglob
DIR_UPLOADS=/home/html/wp-content/uploads/
cd ${DIR_UPLOADS}

for dir in $PWD/+([0-9])/+([0-9]); do
  cd "$dir" &&
    for file in *; do
      echo 'Compress Image'
    done
done

マニュアルページから:

+(pattern-list)
    Matches one or more occurrences of the given patterns

したがって、内部に数値範囲を入力すると、ファイル/ディレクトリが一致します。条件を追加すると、一致が&&ディレクトリの場合にのみ画像を圧縮できます(実際にそのディレクトリに正常に入力した場合)。

拡張ワイルドカードなしでこれを行うことができます[1-2][0-9][0-9][0-9]/[0-1][0-9]。これは、その時点で画像がなくても毎年/月の目次を入力しようとしないため、中括弧を拡張しようとするよりも優れています。

おすすめ記事