![cp 在查找操作中未正确评估目录名](https://linux22.com/image/103887/cp%20%E5%9C%A8%E6%9F%A5%E6%89%BE%E6%93%8D%E4%BD%9C%E4%B8%AD%E6%9C%AA%E6%AD%A3%E7%A1%AE%E8%AF%84%E4%BC%B0%E7%9B%AE%E5%BD%95%E5%90%8D.png)
我正在尝试创建一个脚本,该脚本将查找特定文件名的文件,将文件复制到该文件的位置,然后删除找到的文件。
现在忽略删除部分,这就是我到目前为止所拥有的:
find /path/to/searchdir -name "file.rtf" -exec cp -v "/path/to/filetocopy.rtf" `dirname {}` \;
不幸的是,我似乎无法让它正确评估目录名,因为它返回“。”对于它找到的文件的任何实例。
答案1
find
的-execdir
行动似乎更合适:
find /path/to/searchdir -name file.rtf -execdir cp -v /path/to/filetocopy.rtf . \;
cp
这将从找到的包含名为 的文件的每个目录中运行file.rtf
,因此每次运行时都会.
看到cp
相应的目录。cp
然后您可以添加-delete
或删除该文件(检查一切正常后)。
您的方法不起作用的原因是外壳程序dirname {}
在运行之前进行评估find
并dirname {}
输出.
。所以
find /path/to/searchdir -name "file.rtf" -exec cp -v "/path/to/filetocopy.rtf" `dirname {}` \;
变成
find /path/to/searchdir -name "file.rtf" -exec cp -v "/path/to/filetocopy.rtf" . \;