1

我正在尝试复制某些文件并让它们具有前缀。为了做到这一点,我想到了使用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

但这是丑陋的!(更新结束)

正如标题所说,我正在使用 csh - 不是因为我喜欢它,只是因为那是我们在工作中使用的......

更新 尝试basename用作解决方案,因为find -exec basename '{}' \;删除了 ./ 前缀,但我在 find 中使用带有反引号(`)的基本名称失败,这意味着

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

根本行不通。

4

1 回答 1

2

给你..我在我的linux盒子里测试过

find . -name "kuku*" -exec sh -c 'cp {} foo_`basename {}`' \;
于 2013-07-08T12:21:12.513 回答