如何使用find在CSH中制作带前缀的文件副本?

时间:2013-07-08 08:30:48

标签: linux unix copy find csh

我正在尝试制作某些文件的副本,并让它们有一个前缀。 为了做到这一点,我想到了使用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 '{}` \;

根本不起作用。

1 个答案:

答案 0 :(得分:2)

这里你去..我已经在我的linux框中测试了

find . -name "kuku*" -exec sh -c 'cp {} foo_`basename {}`' \;