Find
查找文件並在文件夾結構完好的情況下進行複制
我正在搜尋過去 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-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
並重新創建此目錄結構