保留目录结构复制文件 | AI生成和翻译

Home 2025.03

根据你的 find 命令输出,你希望将所有 .log 文件复制到 /Users/lzwjava/projects/logs 并保留它们的目录结构。例如,像 ./CoreSimulator/FC275C39-59CC-4483-A64E-5D459D7A1D57/system.log 这样的文件应该最终出现在 /Users/lzwjava/projects/logs/CoreSimulator/FC275C39-59CC-4483-A64E-5D459D7A1D57/system.log。我将展示如何使用 find 结合 cprsync 来实现这一目标,确保目录层次结构得以保留。


解决方案 1:使用 findcp

你可以使用 find 来定位 .log 文件,并使用带有 --parents 选项的 cp 来复制它们,同时保留它们的目录结构。

命令

find . -name "*.log" -exec cp --parents {} /Users/lzwjava/projects/logs \;

解释

结果

运行前准备


解决方案 2:使用 rsync

rsync 是另一个强大的工具,可以在复制文件时保留目录结构,并且对于批量操作通常更高效。

命令

find . -name "*.log" -exec rsync -R -a {} /Users/lzwjava/projects/logs \;

解释

结果

与上述相同——文件连同其完整的相对路径一起被复制。

运行前准备


验证复制结果

运行任一命令后,检查目标目录:

ls -R /Users/lzwjava/projects/logs

你应该看到:

/Users/lzwjava/projects/logs:
CoreSimulator

/Users/lzwjava/projects/logs/CoreSimulator:
CoreSimulator.log  FC275C39-59CC-4483-A64E-5D459D7A1D57  Simulator.log

/Users/lzwjava/projects/logs/CoreSimulator/FC275C39-59CC-4483-A64E-5D459D7A1D57:
com.apple.itunesstored  system.log

/Users/lzwjava/projects/logs/CoreSimulator/FC275C39-59CC-4483-A64E-5D459D7A1D57/com.apple.itunesstored:
itunesstored.log

关键注意事项


选择哪种方法?

两种方法都适用于你的情况。为求简单,我建议从 cp --parents 开始。


最终命令(推荐)

mkdir -p /Users/lzwjava/projects/logs
find . -name "*.log" -exec cp --parents {} /Users/lzwjava/projects/logs \;

从你的 Logs 目录(lzwjava@anonymous Logs %)运行此命令即可!如果你遇到任何问题或想要调整行为(例如,改为扁平化结构),请告诉我。


Back Donate