
こんにちは、同じディレクトリレベル(たとえば)と同じディレクトリ(または)という別のサブディレクトリに複数の画像(jpg
および)があるフォルダがたくさんあります。png
./ParentDirectory/contents/1680x1050.png
1680x1050.jpg
1680x1050.png
find
コマンドを使用してこのファイルを別のディレクトリ(たとえば./Something/
)にコピーし、名前を保持しながらファイル名に親名を追加して最終的には ./Something/ParenDirectory_1680x1050.jpg
sumになることができるかどうか疑問に思いますParenDirectory_1680x1050.png
。
答え1
cd
親ディレクトリを入力したら、次をParentDirectory
実行します。
find ParentDirectory -type f \( -name "1680x1050.png" -o -name "1680x1050.jpg" \) \
-exec sh -c 'cp "$1" "Something/${1%%/*}_${1##*/}"' sh {} \;
-exec
イメージパスは、見つかった各または新しいシェルプロセスに対して実行されるセクションのシェルスクリプトに引数として渡されます。png
jpg
{}
$1
コマンドからcp
ターゲットファイル名を${1%%/*}
収集し、親ディレクトリ名を取得するために使用し、最長のサフィックスパターン(最初の後のすべての文字/
)を削除し、${1##*/}
ファイル名部分をインポートするために使用して最長のプレフィックスパターン(最後まで)を削除しますします。性格/
)。
同じ結果を得るために見つかったすべてのイメージに対して1つのシェルプロセスのみを実行するには、次のようにします。
find ParentDirectory -type f \( -name "1680x1050.png" -o -name "1680x1050.jpg" \) \
-exec sh -c 'for i; do cp "$i" "Something/${i%%/*}_${i##*/}"; done' sh {} +
次に、-loopを使用してスクリプトのすべてのファイル名パラメータを繰り返しますfor
。