xargs と cp: find スタイルの "{}+" の複数展開?

xargs と cp: find スタイルの "{}+" の複数展開?

ファイルのグループを宛先フォルダーにコピーしたいと思います。ただし、cp操作ごとに新しいインスタンスを生成する必要はありません。

の引数の形式はcp次のようになります:

cp src_file1 src_file2 src_file3 dest_dir/

ソースファイル名が行ごとにリストされたファイルがあると仮定すると、これをどのように実行できますか?

ファイルの数が非常に多いため、以下の @Scott のアイデアはコマンド ラインの最大長に達するため機能しません。

cpファイル名のファイルを何らかの方法でパイプして、その処理を実行させたい と思います。xargsまた、コマンド ラインの末尾に展開を追加しようとするため、役に立たないようです。

これは可能ですか?

ありがとう

答え1

filelist含まれる場合

apple
orange
banana

これらはディレクトリにコピーしたいファイルの名前ですfruity。次のように入力します。

cp `cat filelist` fruity

/最後に は必要ありません。

警告: ファイル名にスペースが含まれている場合、これは機能しませんpassion fruit。例: 。

答え2

発見のシミュレーションprint0:

cat filelist |perl -p -e 's/\n/\000/' |xargs -0 cp --target-directory dest_dir/

このサンプルにはxargs -0--target-directory

関連情報