「notes.txt」という名前のファイルを除くディレクトリ内のすべてのファイルを削除するとします。これをパイプラインで行いls | grep -v "notes.txt" | xargs rmます。2番目のパイプの出力がrmが使用すべき入力である場合、なぜxargsが必要なのですか?
比較のために、パイプラインは、echo "#include <knowledge.h>" | cat > foo.cxargsを使用せずにエコーされたテキストをファイルに挿入します。これら2つのパイプラインの違いは何ですか?
スペースを避けるため
—
flob 14年
find . -maxdepth 1 -mindepth 1 -print0 | xargs -0に、代わりに行うことができますls | xargs:-)
ls | grep -v "notes.txt" | xargs rmを除くすべてを削除するために使用しないでください。notes.txt一般的には、出力を解析しないでくださいls。たとえば、単一のファイルにスペースが含まれていると、コマンドが壊れます。より安全な方法はrm !(notes.txt)、Bash(shopt -s extglobセットあり)、またはrm ^notes.txtZsh(ありEXTENDED_GLOB)などです