過去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 ... -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
このディレクトリ構造を再作成します。