cp并以foo-为前缀会导致错误:
$ find my-dir -path "*/*" -execdir sh -c 'cp {} foo-{}' \;
cannot create regular file ‘foo-./blabla.jpg’: No such file or directory
在 macOS 上,我没有得到这个 `./` 前缀,命令正常工作。
有没有办法复制文件名而不带 `./` 前缀?
cp并以foo-为前缀会导致错误:
$ find my-dir -path "*/*" -execdir sh -c 'cp {} foo-{}' \;
cannot create regular file ‘foo-./blabla.jpg’: No such file or directory
在 macOS 上,我没有得到这个 `./` 前缀,命令正常工作。
有没有办法复制文件名而不带 `./` 前缀?
{}嵌入到shell代码中。
正确的方法是:
find my-dir -path "*/*" -execdir sh -c 'cp -- "$1" "foo-${1#./}"' sh {} \;
其中${1#./}负责删除前导的./(如果有的话)。请注意,我使用了双破折号,这在find生成带有./前缀的名称时是不必要的(但无害的),但在其他情况下很有用。
注意事项:
whatever是否为文件。如果是目录,您将收到cp的警告。foo-whatever是否存在以及其类型。如果存在,则根据它是文件还是目录以及它在whatever之前或之后处理的顺序,您将获得不同的结果。