Mungkin dimungkinkan untuk menggunakan sesuatu di sepanjang baris
xargs -n1 -I[] sh -c 'cat {} | grep foo > {}.foo'
atau, untuk menyingkirkan yang tidak berguna cat
xargs -n1 -I{} sh -c 'grep foo {} > ().foo'
Biasanya lebih mudah untuk meletakkannya di skrip shell sehingga Anda bisa meneruskannya file.
cat > fiddle.sh <<\EOF
for f in "$@"; do
grep foo "$f" >"$f.foo"
done
EOF
ls *.txt | xargs sh fiddle.sh # note we can now pass multiple files, no -n1 or -I needed
Pedantry: ls
tidak akan melakukan hal yang benar dengan karakter khusus, terutama baris baru yang disematkan, dalam nama file. Saya akan membuang xargs
seluruhnya, dan (mengingat skrip di atas) lakukan saja
sh fiddle.sh *.txt
atau bahkan
for f in *.txt; do grep foo "$f" >"$f.txt"; done
tepat di prompt.