查找文件并复制,文件夹结构完好

查找文件并复制,文件夹结构完好

我正在搜索过去 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
...

我该如何实现这一目标?我在看

  1. 如何在保留文件夹结构的同时复制修改的文件
  2. https://serverfault.com/questions/180853/how-to-copy-file-preserving-directory-path-in-linux
  3. 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

并重新创建这个目录结构

相关内容