特定の文字列を含む各ファイルの/tmp
ディレクトリ内に出現するファイルを作成しようとしています。
問題は、basename {}
の呼び出しが機能していないように見えることです。これでも、echo basename {}
でもありません。
grep -R 'mystring' . | cut -d: -f 1 | uniq | xargs -n 1 -I {} touch /tmp/`basename {}`
Xargsパラメーターでbasename関数を実行する方法を知っている人はいますか?
これを試して:
grep -R 'mystring' . | cut -d: -f 1 | uniq| xargs -n 1 -I {} -t -i ksh -c "touch /tmp/$(basename {})"
問題は、バックティックの展開が早すぎることです(つまり、xargsに送信される引数ごとに1回ではありません)。より良い方法があるかもしれませんが、明示的なbashループで逃げることができるはずです:
grep -R 'mystring' . | cut -d: -f 1 | uniq | while read f; do touch "/tmp/`basename $f`"; done