我正在尝试制作某些文件的副本,并让它们有一个前缀。
为了做到这一点,我想到了使用find
。为了我们的使用,让我们称他们为kuku文件,我希望他们有一个“foo”前缀:
find . -maxdepth 1 -name "kuku*" -exec cp '{}' foo_'{}' \;
但它不起作用因为find总是用./开始结果所以我得到很多错误消息说“cp:无法创建常规文件`foo _。/ kuku ...`:没有这样的文件或目录”
通过使用foreach f(`ls`)而不是使用grep和status var可以解决这个问题,但它很麻烦,我想学习更好的解决方案(并提高我对find命令的了解。 ..)。
更新 foreach解决方案(我不喜欢并希望您帮助找到替代品):
foreach f (`ls`)
echo $f | grep -lq kuku
if (! $status) then
cp $f foo_$f
endif
end
但这是UGLY! (更新结束)
正如标题所说,我正在使用csh - 不是因为我喜欢它,只是因为这是我们在工作中使用的......
更新
尝试使用basename
作为解决方案,因为find -exec basename '{}' \;
删除了./前缀,但我在使用反引号(`)的find中使用了basename失败了,这意味着
find -name "kuku*" -exec cp '{}' foo_`basename '{}` \;
根本不起作用。
答案 0 :(得分:2)
这里你去..我已经在我的linux框中测试了
find . -name "kuku*" -exec sh -c 'cp {} foo_`basename {}`' \;