このウェブサイトコマンド引数で標準入力を目的の場所に渡すことができるように、xargs
コマンドにオプションを提供します。-J
find . -name '*.ext' -print0 | xargs -J % -0 rsync -aP % user@host:dir/
しかし、GNU xargs のマニュアルページこのオプションは存在しません。
これを許可するコマンドの場合、これを行うにはどうすればよいですか?
ベストアンサー1
これが期待しているかどうかはわかりませんが、BSDの世界(macOSなど)では、コマンドに複数の「ライン」を渡すためのさまざまな方法があります-I
。-J
例:
$ ls
file1 file2 file3
$ find . -type f -print0 | xargs -I % rm %
rm file1
rm file2
rm file3
$ find . -type f -print0 | xargs -J % rm %
rm file1 file2 file3
したがって-I
、xargsは渡された各要素に対して個別にコマンドを実行します。 xargsを使用すると、-J
コマンドを一度実行し、すべての要素を連結して引数として一緒に渡します。
いくつかのコマンド(rm
または)mkdir
は、単一の引数を渡して複数回実行するのと同じように、複数の引数を取得して操作できます。ただし、一部のアプリケーションは、パラメータを渡す方法によって変更されることがあります。たとえば、tar
tarファイルを作成してからファイルを追加したり、一度にすべてのファイルを追加してtarファイルを作成したりできます。
$ find . -iname "*.txt" -or -iname "*.pdf" -print0 | xargs -0 -J % tar cjvf documents.tar.bz2 %