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