これは私のソースディレクトリ構造です。
../openwrt
../openwrt/BackupOfPackages
../openwrt/BackupOfSettings
../openwrt/BackupOfImages
rsyncを使用してターゲットディレクトリにミラーリングしたいと思います。 3つのサブディレクトリにあるファイルのみを再同期したい、拡張子を持つファイルのみを同期させたい:
.installed
from thefolderfromthefolderfromthefolderBackupOfPackages
.img.gz
BackupOfImages
.tar.gz
BackupOfSettings
私のソースディレクトリには、basedir "openwrt"と各サブディレクトリにさまざまなファイルが混在しています。ただし、上記のように、特定のサブディレクトリの特定のファイル形式のみを同期したいと思います。
これは私のrsyncコマンドです。
openWrtPath="/mnt/usb/openwrt/"
ncpPath="/media/myCloudDrive/openwrt"
rsync -vvrit --include='/' --include='BackupOfSettings/' --include='BackupOfSettings/**.tar.gz' --include='BackupOfPackages/' --include='BackupOfPackages/**.installed' --include='BackupOfImages/' --include='BackupOfImages/**.img.gz' --exclude='/*' --delete --delete-excluded $openWrtPath ncp:$ncpPath
コマンドを実行すると、これが表示され非表示になる内容です。 basedirではopkg.installedと「新しいフォルダ」を正しく隠しますが、BackupOfSettings、BackupOfImagesなどから.installedなどのファイル形式は非表示になりません。
Rsyncはソースからターゲットまでほぼすべてを同期しますか?
拡張のみをコピーするようにrsyncコマンドを変更するには:
.installed
BackupOfPackages
フォルダへフォルダ
.img.gz
へBackupOfImages
フォルダ
.tar.gz
へ:つまり、さまざまなサブディレクトリから宛先に転送しないファイル形式が、ソースシステムの対応するサブディレクトリにあっても正しく隠されます。BackupOfSettings
修正する
文を載せてから答えを見つけたと思い--exclude='/*'
ます--exclude='*'
。誰かがこれら2つの除外の違いを説明できますか?
スーダン'/*'
:"basedir(openwrt) のすべてのエントリを除外します。これは basedir のサブディレクトリには適用されません。"?
ありがとうございます!
ベストアンサー1
'/*'
「basedir(openwrt)のすべてのエントリを除外します。これはbasedirのサブディレクトリには適用されません」という意味ですか?
はい、/
これはトランスポートディレクトリのルートであり、/*
そこにあるすべてのエントリ(ファイルとディレクトリ)と一致します。
コマンドの組み込みを次のように短縮できます。
rsync -ai \
--include='BackupOf***/' \
--include='BackupOfImages/**.img.gz' \
--include='BackupOfSettings/**.tar.gz' \
--include='BackupOfPackages/**.installed' \
--exclude='*' \
--delete --delete-excluded \
"$openWrtPath" ncp:"$ncpPath"
これが意味するのは、(たとえば)--include='BackupOf***/'
で始まるすべてのディレクトリとそのサブディレクトリを含むことです。これらのサブディレクトリを含める必要がない場合に変更し、ファイル拡張子を2から1に変更することもできます。BackupOf
BackupOfImages/sub1/sub2/
BackupOf*/
**
*
-a
インクルード-t
およびその他のオプションと一緒にアーカイブモードを使用し、両方の変数を参照しました。