Rsync インクルードと除外オプションを使用してディレクトリとサブディレクトリを含めますが、サブディレクトリのファイルは除外します。

Rsync インクルードと除外オプションを使用してディレクトリとサブディレクトリを含めますが、サブディレクトリのファイルは除外します。

私のシナリオを実際に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 鍵ペアがあるため、ホスト名を使用します。

rsync -avin --progress ~/MyDocuments/'Inet Publishing'/ --include='LandisTwo(2019)' --include='LandisTwo(2020) {バックアップ}' --exclude='*/' e6420:/home /landis/Media/2TBackup/Backups/MyDocuments/ | tee -a ~/logs/Backup-InetPublishing_2020.txt

関連情報