「notes.txt」という名前のファイルを除くディレクトリ内のすべてのファイルを削除するとします。これをパイプラインで行いls | grep -v "notes.txt" | xargs rm
ます。2番目のパイプの出力がrmが使用すべき入力である場合、なぜxargsが必要なのですか?
比較のために、パイプラインは、echo "#include <knowledge.h>" | cat > foo.c
xargsを使用せずにエコーされたテキストをファイルに挿入します。これら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.txt
Zsh(ありEXTENDED_GLOB
)などです