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]
。これは、その時点で画像がなくても毎年/月の目次を入力しようとしないため、中括弧を拡張しようとするよりも優れています。