ディレクトリ (およびそのサブディレクトリ) 内のすべての PDF ファイルを単一の出力ディレクトリに再帰的にコピーするにはどうすればよいですか?

ディレクトリ (およびそのサブディレクトリ) 内のすべての PDF ファイルを単一の出力ディレクトリに再帰的にコピーするにはどうすればよいですか?

多数の PDF ファイルを含むディレクトリがあり、その一部はサブディレクトリ (複数の階層にまたがる場合があります) にあります。一致するすべてのファイルを*.pdfという名前の単一の出力フォルダに移動したいと思いますpapers

これどうやってするの?

答え1

bash最近のバージョンで使用する場合は、次のglobstarオプションを利用できます。

shopt -s globstar
mv **/*.pdf papers/

答え2

  find /bunchopdfs -name "*.pdf" -exec mv {} /papers \;    

これは私が行ったテストです

$ ls -R
.:
a  aaa bbb.pdf  pdfs

./a:
foo.pdf

./pdfs:

ファイル「aaa bbb.pdf」に注目してください。

$ find . -name "*pdf" -exec mv {} pdfs \;
$ ls -R
.:
a  pdfs

./a:

./pdfs:
aaa bbb.pdf  foo.pdf

答え3

find -print0 /directory/with/pdfs -iname "*.pdf" | xargs -0 mv -t /papers

(他の回答と似ていますが、私にとっては pipe/xargs/mv の方が直感的です)

参考までに、上記の 1 行のスクリプトを複数のディレクトリと複数の PDF ファイルで正常に実行しました。

答え4

1 つのディレクトリの深さだけを検索する場合は、次のようにします。

mkdir <destination>
mv */*.pdf <destination>

ここで、<destination>はディレクトリを表します。mvは自動的にディレクトリを作成しません。

関連情報