web-dev-qa-db-ja.com

findコマンドの出力を別のディレクトリに移動する方法は?

このコマンドの出力find /home -name *.pdfを使用して、検索結果のファイルを別のディレクトリに移動します。パイプで。どうやってやるの?

6
Fasih Faqoth

パイプを使用する必要はなく、xargsの引数としてファイル名を作成するためにmvも必要ありません。

mv-execアクション内でfindを使用するだけです。

find /home -type f -name '*.pdf' -exec mv -t /destination {} + 
  • /destinationを実際の宛先ディレクトリに置き換えます
  • findはすべての可能なファイル名を処理します
  • findは、ARG_MAXをトリガーしないように、一度にできるだけ多くのファイル名を渡すことでARG_MAXを処理します
  • ファイルのみを探している場合(おそらくこの場合)、-type fを追加して検索ベクトルを制限します。
  • グロブ展開'*.pdf'をクォートして、findがそれらを処理するため、シェルが事前に展開しないようにします

何らかの奇妙な理由、または学習目的で、pipe -xargsを使用する必要がある場合:

find /home -type f -name '*.pdf' -print0 | xargs -0 mv -t /destination  
13
heemayl

PDFの名前にスペースがない場合、別の方法は、ターミナルでこのコマンドを実行することです。

mv $(find /home -type f -name '*.pdf') ./destination

$()は、コマンド実行(find /home -type f -name '*.pdf')からの出力をその外部のコマンド(mv [...] ./destination)に適用します。

0
anonymous2