Erw*_*ers 3 linux bash command-line find string-manipulation
cp对多个子目录中的文件名执行 a并foo-为其添加前缀会导致错误:
$ find my-dir -path "*/*" -execdir sh -c 'cp {} foo-{}' \;
cannot create regular file ‘foo-./blabla.jpg’: No such file or directory
Run Code Online (Sandbox Code Playgroud)
在 macOS 上,我没有得到这个./前缀,而且命令工作正常。
有没有办法cp不带./前缀的文件名?
即使您的命令在其他地方运行良好,它仍然存在缺陷。永远不要嵌入{}到 shell 代码中。
正确的做法是:
find my-dir -path "*/*" -execdir sh -c 'cp -- "$1" "foo-${1#./}"' sh {} \;
Run Code Online (Sandbox Code Playgroud)
where${1#./}负责删除领先./(如果有)。注意我使用了双破折号,这在find生成带有./前缀的名称时是不必要的(但无害),但在其他情况下很有用。
笔记:
whatever是否为文件。cp如果它是目录,您将收到警告。foo-whatever存在以及它是什么。如果它存在,那么你会得到不同的结果,这取决于它是文件还是目录;并取决于它是在 之前还是之后处理whatever。| 归档时间: |
|
| 查看次数: |
648 次 |
| 最近记录: |