正規表現に一致するファイルを含むすべてのディレクトリをコピー/バックアップします。

正規表現に一致するファイルを含むすべてのディレクトリをコピー/バックアップします。

dir構造を繰り返し繰り返し、名前が特定の正規表現に一致するファイルディレクトリのみを取得するバックアップを作成したいと思います。一致するものがあれば、ディレクトリ構造を保存したいと思います。

~/dir1/dir2/regexpmatch.txt

ターゲットに同じディレクトリ構造を作成し、ファイルを次の場所にコピーします。

/media/backup/dir1/dir2/regexpmatch.txt

rsyncを使用するのが最善ですが、不可能な場合は別のプログラムを使用してください。

答え1

findと合わせたらどうでしょうかtar?すべてのファイルを検索する例.c:

find . -type f -name '*.c' -print | tar zcf backup.tar.gz -T -

答え2

次のようにコマンドを組み合わせる必要がありますfindrsync

find . -regex .*X | rsync --files-from=- ./ b/

使用例:

$ find b/
b/
b/a
b/a/dX
b/a/cX
$ find a/
a/
a/dX
a/cX
a/b
$ rm -rf b
$ find . -regex .*X | rsync --files-from=- ./ b/
$ find b/
b/
b/a
b/a/dX
b/a/cX

ここでは、正規表現に一致するファイルのみをコピーします.*X

答え3

rsyncのマニュアルページから:

Here s  an  example that copies all .pdf files in a hierarchy, only creating
the necessary destination directories to hold the .pdf  files,  and  ensures
that  any  superfluous  files and directories in the destination are removed
(note the hide filter of non-directories being used instead of an exclude):

rsync -avm --del --include= *.pdf  -f  hide,! */  src/ dest

If you didn t want to remove superfluous destination files, the  more  time-
honored  options  of "--include= */  --exclude= * " would work fine in place
of the hide-filter (if that is more natural to you).

関連情報