GNU/Linux >> Linux Esercitazione >  >> Linux

Impossibile ottenere l'opzione di esclusione di rsync per escludere la directory

mkdir -p test/a/b/c/d/e
mkdir -p test/dest
rsync -nvraL test/a test/dest --exclude=a/b/c/d 

Questo funziona. Come test/a è la directory di base sincronizzata, il modello di esclusione viene specificato iniziando con a/

Mostraci i veri percorsi/esclusioni se questo non aiuta.

L'esecuzione di rsync con -vn elencherà directory/file:il modello viene confrontato con il formato stampato da rsync.


Uno di questi funzionerebbe:

rsync -nvraL test/a test/dest --exclude=/a/b/c/d
rsync -nvraL test/a/ test/dest --exclude=/b/c/d

Nota la desinenza / nel percorso di origine fa una differenza fondamentale rispetto a come --exclude dovrebbe essere specificato. Ciò presuppone che abbiamo:

mkdir -p test/a/b/c/d/e
mkdir -p test/a/other/place/a/b/c/d
mkdir -p test/dest

Il post originale ha difficoltà quando il percorso di esclusione inizia con un / . La risposta di Daniel è corretta che questo / iniziale in exclude path potrebbe essere desiderabile escludere un percorso specifico e che questo / iniziale dovrebbe essere inteso come ^ iniziale nelle espressioni regolari. Tuttavia, la sua risposta contiene un errore di battitura sulla desinenza / nel percorso di origine.


Seguendo l'esempio di Erik, vuoi fare questo:

rsync -nvraL test/a/ test/dest --exclude=/b/c/d

In realtà, né la risposta di Erik né quella di Antoni sono del tutto accurate.

Erik ha ragione nel dirlo

Poiché test/a è la directory di base sincronizzata, il modello di esclusione viene specificato iniziando con a/

È vero che la radice del modello di esclusione è test/a (ovvero il pattern /some/path si lega a test/a/some/path ), ma non è tutto.

Dalla pagina man:

se il modello inizia con un / allora è ancorato a un punto particolare nella gerarchia dei file, altrimenti viene confrontato con la fine del percorso. Questo è simile a un ^ iniziale nelle espressioni regolari. Quindi "/foo" corrisponderebbe a un file chiamato "foo" nella "radice del trasferimento" (per una regola globale) o nella directory del file di unione (per una regola per directory).

Possiamo ignorare il per-directory un po' perché qui non si applica a noi.

Pertanto, rsync -nvraL test/a test/dest --exclude=a/b/c/d escluderà sicuramente test/a/b/c/d (e figli), ma escluderà anche test/a/other/place/a/b/c/d .

rsync -nvraL test/a test/dest --exclude=/b/c/d , invece, escluderà solo test/a/b/c/d (e figli) (test/a essendo il punto in cui / è ancorato).

Questo è il motivo per cui hai ancora bisogno della barra iniziale di ancoraggio se vuoi escludere quel percorso specifico dal backup. Questo potrebbe sembrare un dettaglio minore, e lo sarà tanto più specifico diventa il tuo modello di esclusione (ad es. Pictures contro home/daniel/Pictures ) ma potrebbe arrivare a morderti nel culo.


Linux
  1. Escludere tutti i file di sottolineatura punto da Rsync?

  2. La cartella di esclusione Rsync non funziona?

  3. Inizia con Latex su Linux

  4. rsync copia solo su determinati tipi di file utilizzando l'opzione include

  5. Impossibile utilizzare mkdir nella home directory:autorizzazione negata (Linux Lubuntu)

Come utilizzare rsync per escludere file e directory nel trasferimento di dati

Come escludere file e directory con Rsync

6 Esempi di rsync per escludere più file e directory utilizzando exclude-from

Come utilizzare il comando 'cp' per escludere una directory specifica?

Utilizzando le opzioni di inclusione ed esclusione di Rsync per includere directory e file in base al modello

rsync e collegamenti simbolici