ディレクトリ内の数字で終わるすべてのファイルを見つけて(この部分では問題ありません)、変更された名前でコピーする必要があります(この部分をどうするかわかりません)。通常:
find $folder -maxdepth 1 -type f -name '*-[0-9]\.jpg'
これらすべてのファイルを同じディレクトリにコピーし、名前を付けます。$originalName-mini.jpg
答え1
find
+bash
解決策:
find $folder -maxdepth 1 -type f -name "*-[0-9].jpg" -exec \
bash -c 'cp "$1" "${1:0:-4}-mini.jpg"' _ {} \;
答え2
実際にはこれは必要ありませんfind
。単一のディレクトリのみを表示しているため、シェルループだけで操作を実行できます。また、ファイル名のグローブパターンでドットをエスケープする必要はありません。
for pathname in "$folder"/*-[0-9].jpg; do
[ -f "$pathname" ] && cp "$pathname" "${pathname%-[0-9].jpg}-mini.jpg"
done
パラメータ置換は${variable%pattern}
値の末尾から削除されます。pattern
variable
この-f
テストでは、名前が間違ったディレクトリではなく、通常のファイル(またはそれを指すシンボリックリンク)を扱っていることを確実に確認できます。
find
同じ操作を実行するために使用します。
find "$folder" -maxdepth 1 -type f -name '*-[0-9].jpg' -exec sh -c '
for pathname do
cp "$pathname" "${pathname%-[0-9].jpg}-mini.jpg"
done' sh {} +
答え3
これを行う1つの方法は、次のコマンドをスクリプトに追加することです。元の名前があると仮定すると、$originalName
次のものを使用できます。
cp $originalName $(basename $originalName .jpg)-mini.jpg