如何查找文件并复制其目录?

如何查找文件并复制其目录?

我使用以下命令查找文件并将其复制到其他地方,

find /search/ -name file.txt -exec cp -Rp {} /destination \;

如何复制父目录中的所有文件和子目录file.txt

例子,

/search/test/sub
/search/test/sub2
/search/test/file.txt
/search/test/file.doc

它们应该被复制为

/destination/sub
/destination/sub2
/destination/file.txt
/destination/file.doc

答案1

使用-execdir(不是标准谓词,但经常实现),给定的实用程序将在找到文件的目录中执行。

这意味着你可以做

find /search -name file.txt -execdir cp -Rp . /destination \;

没有-execdir

find /search -name file.txt -exec sh -c 'cp -Rp "${1%/*}/." /destination' sh {} \;

或者,

find /search -name file.txt -exec sh -c 'cd "${1%/*}" && cp -Rp . /destination' sh {} \;

最后两个变体为每个找到的文件执行一个简短的内联脚本。该脚本将文件的路径名作为其第一个参数(在 中),并使用(标准参数替换)$1从路径名中删除文件名。${1%/*}然后它应用cp与第一个变体中相同的命令-execdir

执行此操作的代码cd更忠实地模拟-execdir顶部变体实际执行的操作,而中间变体通过引用.路径末尾的源目录来绕过目录更改。

相关内容