10144911ファイルがあるディレクトリがあります。これまでのところ、次のことを試しました。 for f in ls; do sed -i -e 's/blah/blee/g' $f; done シェルがクラッシュしlsました。チルダになっていますが、どのように作成するかわかりません。 ls | xargs -0 sed -i -e 's/blah/blee/g' 引数が多すぎます sed find . -name "*.txt" -exec sed -i -e 's/blah/blee/g' {} \; これ以上メモリをフォークできませんでした この親切なコマンドを作成する方法に関する他のアイデアはありますか?ファイルは互いに通信する必要はありません。ls | wc -l動作しているように見える(非常に遅い)ので、可能に違いない。
私の理解では、以下はまったく同じ意味です。 ls -1 | xargs file {} ls -1 | xargs -I{} file {} -Iオプションが指定されていない場合、デフォルトは-I {}です。 現在のディレクトリ内のすべてのファイルを一覧表示し、fileそれぞれに対してコマンドを実行します。名前にスペースが含まれているものもあります。しかし、違いに気づきました。下記参照: $ ls -1 Hello World $ ls -1 | xargs file {} {}: ERROR: cannot open `{}' (No such file or directory) Hello: ERROR: cannot open `Hello' (No such file or directory) World: …
xargsを使用して、指定された各引数に対してコマンドを実行しようとしていますが、残念ながら、-nと組み合わせた場合、-replace / -Iフラグは正しく機能しないようです。-nオプションに関係なく、{}はstdinから読み取られた引数の完全なリストに展開されるようです。 残念ながら、ウェブ上のすべての例は、{}が展開されている場合に複数の引数をとるコマンド(mv、cp、rm)用のものであるようです。 たとえば、実行時: echo a b c d | xargs -n 1 -I {} echo derp {} 出力は次のとおりです。 derp a b c d しかし、私は期待しました: derp a derp b derp c derp d ただし、-I {}なしで実行すると、予期した結果が得られます。 echo a b c d | xargs -n 1 echo derp derp a derp …