2014-09-03 125 views
1

我有find命令是这样的:如何修改通过find命令传递给-exec的'{}'参数?

find <some criteria> -exec echo "{}" \;

但我想修改“{}”回声之前的说法被调用。 例如,剥夺它的第一个路径段($ {变量#* /})并保留其余部分。

我知道我可以在执行完后调用另一个脚本,但我更喜欢在一个脚本中包含所有内容。

可能吗?

+1

为什么不能管找到sed的? – 2014-09-03 23:13:59

+0

对!我以前应该想到这一点。耻辱。 – ardabro 2014-09-04 07:02:57

+0

我将它写为答案 – 2014-09-04 15:53:05

回答

2

你可以只是把它管sed这样的:

find <some criteria> | sed "s,.#*/,," 
3

你可以使用内联SH-脚本:

find tmp -exec sh -c 'basename "{}" | wc' \; 
+2

用'-exec sh -c'basename“$ 1”| wc'_ {} \;''你可以避免代码注入 – 2014-09-03 23:32:06

+2

如果路径有两个以上的组件,'basename'不会和'$ {path#* /}'做同样的事情。 @ thatotherguy的方法允许使用参数扩展形式:'find -exec sh -c'echo“$ {1#* /}”'_ {} \;'。尽管在这种情况下,解决方案可能是'exec'的'-printf'操作的'%P'格式指令。 (假设Gnu找到)。 – rici 2014-09-04 06:06:49

相关问题