web-dev-qa-db-ja.com

xargsパラメーターを使用した内部関数呼び出し

特定の文字列を含む各ファイルの/tmpディレクトリ内に出現するファイルを作成しようとしています。

問題は、basename {}の呼び出しが機能していないように見えることです。これでも、echo basename {}でもありません。

grep -R 'mystring' . | cut -d: -f 1 | uniq | xargs -n 1 -I {} touch /tmp/`basename {}`

Xargsパラメーターでbasename関数を実行する方法を知っている人はいますか?

2
Spredzy

これを試して:

grep -R 'mystring' . | cut -d: -f 1 | uniq| xargs -n 1 -I {} -t -i ksh  -c "touch /tmp/$(basename {})"
2
sfgroups

問題は、バックティックの展開が早すぎることです(つまり、xargsに送信される引数ごとに1回ではありません)。より良い方法があるかもしれませんが、明示的なbashループで逃げることができるはずです:

grep -R 'mystring' . | cut -d: -f 1 | uniq | while read f; do touch "/tmp/`basename $f`"; done
2
Tilo Wiklund