Rsync:特定のディレクトリの特定のファイル形式のみを同期する方法は?

Rsync:特定のディレクトリの特定のファイル形式のみを同期する方法は?

複数のディレクトリのすべての画像タイプファイルを/ imagesにコピーしたいと思います。同じディレクトリ内のすべてのビデオタイプファイルを/ videosにコピーしたいと思います。すべてのドットディレクトリとドットファイル(隠しファイルとディレクトリ)を除外したいと思います。

ディレクトリ構造:

DCIM (GOOD)
DCIM/.thumbnails (BAD)
DCIM/AccessoryCamera (GOOD)
.cloudagent (BAD)
Pictures (GOOD)
Downloads (GOOD)

努力しています:

rsync -ravtz --progress --prune-empty-dirs --include "DCIM/" --include "Download/*" --include "Picture/" --include "*.jpg" --include "*.png" --include "*.gif" --include "*.nef" --exclude '"*"' --exclude '".*"' --exclude '"*/"' --exclude '".*/"' --exclude '"DCIM/.thumbnails/*' --log-file=/mm/rsync.log /mnt/S8/sdcard/ '/mm/images'

rsync -ravtz --progress --prune-empty-dirs --include "DCIM/" --include "Download/*" --include "Picture/" --include "*.mov" --include "*.mpeg" --include "*.mpg" --include "*.mp4" --exclude '"*"' --exclude '".*"' --exclude '"*/"' --exclude '".*/"' --exclude '"DCIM/.thumbnails/*' --log-file=/mm/rsync.log /mnt/S8/sdcard/ '/mm/videos'

答え1

バラよりRsyncフィルタ:1つのパターンのみをコピーrsync フィルタを構築する方法に関する追加のガイドライン。一般的なアイデアには、必要なもの(必要なものにつながるディレクトリを含む)が含まれ、残りは最後に除外されます。

rsync -az --progress --prune-empty-dirs \
    --exclude '.*' \
    --include "/DCIM" --include "/Download" --include "/Picture" --exclude '/*' \
    --include "*.jpg" --include "*.png" --include "*.gif" --include "*.nef" \
    --include '*/' --exclude '*' \
    --log-file=/mm/rsync.log /mnt/S8/sdcard/ '/mm/images'
  1. すべてのドットファイルを除外します。
  2. 最上位レベルでは、一部のディレクトリが含まれ、他のすべてのディレクトリは除外されます。
  3. 必要なファイル形式を含めてください。
  4. 最上位レベルから除外されたディレクトリを除くすべてのディレクトリが含まれ、残りのディレクトリはすべて除外されます。

答え2

(1)デバイスで同期するディレクトリを含むテキストファイルを作成します。

./input_dirs

コンテンツ./input_dirs:

./DCIM ./Pictures ./DCIM/AccessoryCamera ./Downloads

パラメータを使用して、 --files-from=./input_dirs.txt問題のディレクトリをRSYNCにロードします。

(2)パラメータを使用して目的の--filter='dir-merge ./filter_file'拡張フィルタをロードします。 (例: *.png *.gif *.jpg)

コンテンツ./filter_file:

+ *.png + *.jpg + *.gif - /*

(サム)私はLinuxサンドボックスサーバーでこのテストを実行しましたが、成功しました。ご注意ください、ただコピーするファイルは次のとおりです。.png.gif*.jpg:

結果:

[root@localhost ~]# ls -Fal total 1012 dr-xr-x---. 4 root root 4096 Jun 5 20:03 ./ dr-xr-xr-x. 26 root root 4096 May 30 15:16 ../ -rw-------. 1 root root 1219 May 30 15:04 anaconda-ks.cfg -rw-------. 1 root root 7161 Jun 5 19:45 .bash_history -rw-r--r--. 1 root root 18 Apr 29 2010 .bash_logout -rw-r--r--. 1 root root 176 Apr 29 2010 .bash_profile -rw-r--r--. 1 root root 176 Apr 29 2010 .bashrc -rw-r--r--. 1 root root 100 Apr 29 2010 .cshrc -rwxr--r--. 1 root root 9565 May 30 20:41 cve.sh* drwxr-xr-x. 2 root root 4096 Jun 5 20:03 dest/ -rw-r--r--. 1 root root 14704 Dec 27 12:40 epel-release-7-9.noarch.rpm -rw-r--r--. 1 root root 508 May 30 22:08 file1 -rw-r--r--. 1 root root 508 May 30 22:08 file2 -rw-r--r--. 1 root root 29 Jun 5 20:03 filter_file -rw-r--r--. 1 root root 3 Jun 5 19:46 input_dirs -rw-r--r--. 1 root root 28978 May 30 15:04 install.log -rw-r--r--. 1 root root 7572 May 30 15:01 install.log.syslog -rw-------. 1 root root 88 Jun 4 17:49 .lesshst drwxr-----. 3 root root 4096 Jun 4 17:45 .pki/ -rw-r--r--. 1 root root 624068 May 24 04:34 samba-4.4.4-14.el7_3.x86_64.rpm -rw-r--r--. 1 root root 266168 May 24 04:34 samba-libs-4.4.4-14.el7_3.x86_64.rpm -rw-r--r--. 1 root root 129 Apr 29 2010 .tcshrc -rw-r--r--. 1 root root 0 Jun 5 19:55 test.gif -rw-r--r--. 1 root root 0 Jun 5 19:55 test.jpg -rw-r--r--. 1 root root 0 Jun 5 19:54 test.png

[root@localhost ~]# rsync -av --dry-run --files-from=./input_dirs --filter='dir-merge ./filter_file' ./ ./dest building file list ... done ./ test.gif test.jpg test.png sent 92 bytes received 24 bytes 232.00 bytes/sec total size is 0 speedup is 0.00 (DRY RUN)

実際にファイルをコピーするには、--dry-runを削除してください。

関連情報