web-dev-qa-db-ja.com

改行で区切られたxargs

xargsにセパレータとしてonly改行を使用させることは可能ですか? (それが重要な場合、LinuxおよびOS Xのbashで)

知っている -0を使用できますが、すべてのコマンドがNUL区切りの出力をサポートしているわけではないため、PITAです。

44
Kornel

の線に沿った何か

alias myxargs='Perl -p -e "s/\n/\0/;" | xargs -0'
cat nonzerofile | myxargs command

うまくいくはずです。

19
hurfdurf

GNU xargs(Linuxではデフォルト、OS XのMacPortsからfindutilsをインストールしてインストール)サポート -dを使用すると、カスタム区切り文字を指定できます 入力できるため、次のことができます

ls *foo | xargs -d '\n' -P4 foo 
58
James

Bashでは、while-readループを優先して、少しトリッキーなことは何でもxargsを避けたいと思っています。ご質問は、while read -ar LINE; do ...; doneは仕事をします(LINEで配列構文を使用することを忘れないでください。例:${LINE[@]}(行全体)。これにはトリックは必要ありません。デフォルトでは、readは\nを行終了文字として。

SO xargsとwhile-readループの長所と短所についての質問を投稿する必要があります... done!

5
Charles Stewart

cat file | xargs | sed 's/ /\n/ig'これは、標準のLinux bashツールを使用して、スペースを改行に変換します。

0
Omar Al-Ithawi

標準バージョンではありません。私はそれを行うハッキングされたバージョンを持っています-「find ... -print0 | xargs -0 ...」について知る前にそれを使用しました。コピーが必要な場合は私に連絡してください-私のプロフィールを参照してください。 (ロケットサイエンスはありません。ただし、それで問題が解決します。完全なxargsレプリカではありません。)

0