find コマンドを使用した名前のコピーと変更

find コマンドを使用した名前のコピーと変更

こんにちは、同じディレクトリレベル(たとえば)と同じディレクトリ(または)という別のサブディレクトリに複数の画像(jpgおよび)があるフォルダがたくさんあります。png./ParentDirectory/contents/1680x1050.png1680x1050.jpg1680x1050.png

findコマンドを使用してこのファイルを別のディレクトリ(たとえば./Something/)にコピーし、名前を保持しながらファイル名に親名を追加して最終的には ./Something/ParenDirectory_1680x1050.jpgsumになることができるかどうか疑問に思います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イメージパスは、見つかった各または新しいシェルプロセスに対して実行されるセクションのシェルスクリプトに引数として渡されます。pngjpg{}$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

おすすめ記事