2016-11-03 9 views

答えて

2

使用-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 {} . ';' 
+0

最初のものは、(Linuxでは、bashの4.3.46)私のために動作しませんでした...エラー'find:' -exec'''に引数がありません。これは 'find -name 'です* pdf *' -exec cp -t ./ {} \ +' – Sundeep

+1

@Sundeep、fixed –

関連する問題