我正在搜索过去 60 分钟内创建或修改的文件。我通过以下方式找到这些
find ~/data/ -cmin -60 -mmin -60 -type f
〜主目录/usr/wg/
之后我想复制这些文件并保留主文件夹结构... find 命令的结果是例如...
/usr/wg/data/foo1/file1.txt
/usr/wg/data/foo2/bar2/file2.txt
...
现在当我使用
rsync -a `find ~/data/ -cmin -60 -mmin -60 -type f` ~/vee/
~/vee/
在我得到的文件夹中
/usr/wg/vee/usr/wg/data/foo1/file1.txt
/usr/wg/vee/usr/wg/data/foo2/bar2/file2.txt
...
虽然我想要
/usr/wg/vee/foo1/file1.txt
/usr/wg/vee/foo2/bar2/file2.txt
...
我该如何实现这一目标?我在看
- 如何在保留文件夹结构的同时复制修改的文件
- https://serverfault.com/questions/180853/how-to-copy-file-preserving-directory-path-in-linux
- https://stackoverflow.com/questions/1650164/bash-copy-named-files-recursively-preserving-folder-struct
和其他几个答案,但我似乎没有得到正确的答案。
答案1
你应该这样重写你的命令:
cd ~/data; find . -cmin -60 -mmin -60 -type f
能够从 find 相对路径中获取
也许像
find ... -exec cp -r "{}" ../vee/ \;
将完成复制具有子目录结构的文件的工作
答案2
您可以使用--parents
开关:
cd ~/data; find . -cmin -60 -mmin -60 -type f -exec cp --parents "{}" ~/vee/
从手册页:
--parents
use full source file name under DIRECTORY
也就是说,当你得到路径结果时:
./foo1/file1.txt
./foo2/bar2/file2.txt
cp
将使用输入文件的完整路径并将其添加到目标路径,如下所示:
~/vee/./foo1/file1.txt
~/vee/./foo2/bar2/file2.txt
并重新创建这个目录结构