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