コマンドfind
で検索されたファイルを現在のディレクトリにコピーしたい
# find linux books
find ~ -type f -iregex '.*linux.*\.pdf' -print0 | xargs -0 echo
# the result
../Books/LinuxCollection/Linux_TLCL-17.10.pdf ../Richard Blum, Christine Bresnahan - Linux Command Line and Shell Scripting Bible, 3rd Edition - 2015.pdf ..
コマンド `cp 'を使用してファイルを現在のディレクトリにコピーするテスト
find ~ -type f -iregex '.*linux.*\.pdf' -print0 | xargs -0 cp .
エラーを取得:
usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvXc] source_file target_file
cp [-R [-H | -L | -P]] [-fi | -n] [-apvXc] source_file ... target_directory
コマンド置換の問題を解決します
cp $(find ~ -type f -iregex '.*linux.*\.pdf' -print0) .
xargs
でそれを達成する方法は?
cp
エラーが示すように、ターゲットディレクトリは最後に来る必要があります。 cp
にはGNU cp
の-t
オプションと同等のものがないので、ファイル名を挿入するにはxargsを取得する必要がありますcp
と.
の間:
find ... | xargs -0 -I _ cp _ .
ここで、-I
は、どの文字列を入力に置き換えるかを指定するために使用されます(この場合は_
を使用していますが、{}
も一般的に使用されています)。
もちろん、これはfind
自体で行うことができます:
find ~ -type f -iregex '.*linux.*\.pdf' -exec cp {} . \;