xargsコマンドを使用してfindコマンドで検索したファイルをコピーする


2

で検索したファイルをコピーしたい find 現在のディレクトリにコマンドを入力します。次のコマンドラインを実行しています。

    # find linux books
$ find ~ -type f -iregex '.*linux.*\.pdf' -print0 | xargs -0 echo
    # Expected output on STDOUT
../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) .

しかし、上記のコマンドを実行すると、次のように別のエラーが発生します。

cp: Blum,: No such file or directory

どのように私はを使用して目的の結果を達成するのですか xargs コマンド?

回答:


2

xargs その入力をコマンドに追加するので、基本的には実行中です。 cp . source_file。つかいます

find ~ -type f -iregex '.*linux.*\.pdf' -print0 | xargs -I '{}' -0 cp '{}' .

代わりに。


ありがとうございました。マジックオプションについてはマニュアルページを参照してください I。その説明について正直に非常に混乱していました。
JawSaw

-I あとで入力に置き換えられる文字を定義するためだけに使用されます。そう xargs 標準入力から読み込み、読み込んだものをすべて取得して、 {} です。
nohillside

1

使用せずに簡単に目的の結果を達成することもできます。 xargs 次に示すようにコマンドを入力します。

find ~ -type f -iregex '.*linux.*\.pdf' -print0 -exec cp {} . \;

より単純なコマンドラインを作成し、配管を必要としません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.