我正在尝试创建一个出现在我的/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 的每个参数都不是一次)。可能有更好的方法,但您应该能够摆脱显式的 bash 循环:
grep -R 'mystring' . | cut -d: -f 1 | uniq | while read f; do touch "/tmp/`basename $f`"; done