Find

查找文件並在文件夾結構完好的情況下進行複制

  • December 11, 2020

我正在搜尋過去 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-structure

和其他幾個答案,但我似乎沒有得到正確的答案。

您應該以這種方式重寫您的命令:

cd ~/data; find . -cmin -60 -mmin -60 -type f

能夠從查找相對路徑中獲取

也許像

find ...  -exec cp -r "{}" ../vee/ \; 

將完成複制具有子目錄結構的文件的工作

您可以使用--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

並重新創建此目錄結構

引用自:https://unix.stackexchange.com/questions/508285