find
とcp
のコマンドを同時に実行するにはどうすればよいですか?私はこれを試した:Linuxでfindコマンドとcpコマンドを同時に実行するにはどうすればよいですか?
find -name "*pdf*" | xargs cp $1 ./
しかし、それは動作しません。
find
とcp
のコマンドを同時に実行するにはどうすればよいですか?私はこれを試した:Linuxでfindコマンドとcpコマンドを同時に実行するにはどうすればよいですか?
find -name "*pdf*" | xargs cp $1 ./
しかし、それは動作しません。
使用-exec
オプション:
find ./ -name "*pdf*" -exec cp -t . {} \+
は{}
が処理されている現在のファイル名に置き換えられます。 find
のmanページから
:
-exec command {} +
...コマンドラインは最後に選択されたファイル名を追加することによって構築されます。.. コマンドラインがずっとに内蔵されています
xargs
がコマンドラインをビルドするのと同じ方法です。
-t
(対象ディレクトリ)オプション(GNU拡張)の使用に注意してください。一致するファイル名がコマンドラインの末尾に追加され、宛先は最後に指定する必要があるため、-exec cp {} . +
は使用できません。別の回避策はsh
を呼び出すことです:
find ./ -name "*pdf*" -exec sh -c 'cp "[email protected]" .' '' {} +
私は+
文字を常習的に逃れました。シェルによる拡張からシェルを保護するには、find
の特殊文字をエスケープする必要があります。特に、+
より前にはバックスラッシュの必要はないでしょう。ほとんどのシェルはそれを文字列として解釈するからです(別のものに展開されることはありません)。しかし、あなたは間違いなく(各ファイルを順番にコマンドを適用する)/引用;
をエスケープする必要があります:
find -name "*pdf*" -exec cp -f {} . ';'
最初のものは、(Linuxでは、bashの4.3.46)私のために動作しませんでした...エラー'find:' -exec'''に引数がありません。これは 'find -name 'です* pdf *' -exec cp -t ./ {} \ +' – Sundeep
@Sundeep、fixed –