私のシナリオを実際にrsyncとして扱うことができるかどうか疑問に思います。 Rsyncはローカルとリモートの間でうまく機能します。
htdocs/
folderswithfilesIneed/
somefilesandfolders.jpg
afolder/
somefiles.png
version/
photofolder/
photowithstupidname.jpg
...
anotherfolderwithstupidname/
photowithstupidname.jpg
...
...
これらすべてのファイルとフォルダを同期したいのですが、「photofolder」と「anotherfolderwithstupidname」のすべてのファイルを除外したいと思います。
誰でもこれを一度に考えてみましたか?
編集:もう少し明確に言えば、「バージョン」にフォルダが多いので、その内容を1つずつ除外することはできません。
答え1
もちろん、これは除外ルールを使用すると簡単に実行できます。ディレクトリとそのコンテンツの両方を除外するには、ディレクトリ自体を除いてナビゲートしないでください。ディレクトリのみを含めsomedir
て内容を含めたくない場合は(空のディレクトリ転送など)を除外しますsomedir/*
。除外句がで始まる場合、/
これは同期しているディレクトリルートへのパスです。
rsync -a --exclude='/version/photofolder/*' --exclude='anotherfolderwithstupidname/*' htdocs/ elsewhere/
すべてのサブディレクトリを含み…/version
、ディレクトリ以外のファイルは含まず、…/version
サブディレクトリのコンテンツを除外する場合:
rsync -a --include='/version/*/' --exclude='/version/*' htdocs/ elsewhere/
すべてのサブディレクトリとその内容を含むが…/version
ディレクトリではない次のファイルを除外する場合…/version
:
rsync -a --include='/version/*/' --include='/version/*/*' --exclude='/version/*' htdocs/ elsewhere/
答え2
新しいコマンド文字列は --included ディレクトリを作成し、その内容ディレクトリおよび/またはファイルをコピーしますが、深さは2つのディレクトリだけです。なぜ?
rsync -avid --progress ~/MyDocuments/'Inet Publishing'/ --recursive --include='LandisTwo (2019)' --include='LandisTwo (2020) {backup}' --include='*.*' --exclude='**/' e6420:/home/landis/Media/2TBackup/Backups/MyDocuments/"Inet\ Publishing"/ | tee -a ~/logs/Backup-InetPublishing_2020.txt
- ディレクトリが作成されましたが、ファイルがディレクトリにコピーされていません(再帰なし)。親ディレクトリのファイルはコピーされますが、子ディレクトリはコピーされません。これを処理します。
これは、親の../Inet\ Publishingをrysnc'ingするときに、ディレクトリ全体とすべてのサイト(-avinの "n")に加えて、ワークステーションからサーバーまで私に適しており、私の個人用サイト(rysnc)もバックアップできます。他のサーバーへの「試運転」は削除してください。 )。
--exclude */ は "Inet Publishing/" の他のすべてのディレクトリであり、 --include per man rsync プロセスシーケンスの後に来る必要があるようです(--include の前に来ると、すべてが --exclude になり、追加のトークンは処理されなくなります) 。 、少なくともそれは私がそれを読み、実際にこれを思いついた方法です)。
これは実際に私がcronで実行しているスクリプトの1行です。 *明らかにターゲットホストはIPです。ホストは /etc/hosts で定義され、SSH 鍵ペアがあるため、ホスト名を使用します。