【发布时间】:2013-07-08 08:30:48
【问题描述】:
我正在尝试复制某些文件并让它们具有前缀。
为了做到这一点,我想到了使用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 '{}` \;
根本行不通。
【问题讨论】:
-
我找不到你给我的链接和我建议和说的解决方案之间的区别太麻烦和不需要。无论如何感谢您的链接:)