xargsパラメータによる内部関数呼び出し

xargsパラメータによる内部関数呼び出し

/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

関連情報