GNU/Linux >> Linux Esercitazione >  >> Linux

Come si esegue il diff di una directory solo per i file di un tipo specifico?

Puoi anche usare find con -exec per chiamare diff:

cd /destination/dir/1
find . -name *.xml -exec diff {} /destination/dir/2/{} \;

La mancanza di un --include complementare ... .

Possiamo fare una soluzione alternativa, un file di esclusione con tutti i file tranne quello che vogliamo includere. Quindi creiamo file1 con un trova tutti i file che non hanno estensioni che vogliamo includere, sed cattura il nome del file ed è solo :

diff --exclude-from=file1  PATH1/ PATH2/

Ad esempio:

find  PATH1/ -type f | grep --text -vP "php$|html$" | sed 's/.*\///' | sort -u > file1 
diff PATH1/ PATH2/ -rq -X file1 

Preso da (una versione della) pagina man:

-x PAT  --exclude=PAT
  Exclude files that match PAT.

-X FILE    --exclude-from=FILE
  Exclude files that match any pattern in FILE.

Quindi sembra -x accetta solo un modello come riportato, ma se metti tutti i modelli che vuoi escludere in un file (presumibilmente uno per riga) potresti usare il secondo flag in questo modo:

$ diff /destination/dir/1 /destination/dir/2 -r -X exclude.pats

dove exclude.pats è:

*.jpg
*.JPG
*.xml
*.XML
*.png
*.gif

Puoi specificare -x più di una volta.

diff -x '*.foo' -x '*.bar' -x '*.baz' /destination/dir/1 /destination/dir/2

Dalla sezione Confronto tra directory di info diff (sul mio sistema, devo fare info -f /usr/share/info/diff.info.gz ):

Per ignorare alcuni file durante il confronto delle directory, utilizzare l'opzione '-xPATTERN' o '--exclude=PATTERN'. Questa opzione ignora tutti i file o le sottodirectory i cui nomi di base corrispondono al pattern della shell PATTERN. A differenza della shell, un punto all'inizio della base di un nome di file corrisponde a un carattere jolly all'inizio di un pattern. Dovresti racchiudere PATTERN tra virgolette in modo che la shell non lo espanda. Ad esempio, l'opzione -x '*.[ao]' ignora qualsiasi file il cui nome termina con '.a' o '.o'.

Questa opzione si accumula se la specifichi più di una volta. Ad esempio, utilizzando le opzioni -x 'RCS' -x '*,v' ignora qualsiasi file o sottodirectory il cui nome di base è 'RCS' o termina con ',v'.


Linux
  1. Come utilizzare Inotifywait per guardare una directory per la creazione di file di un'estensione specifica?

  2. CentOS / RHEL:come impostare SFTP su Chroot Jail solo per un gruppo specifico

  3. CentOS / RHEL:come impostare la jail chroot per vsftp solo per utenti specifici

  4. Come verificare se esiste un file in una directory specifica in uno script bash?

  5. Come posso forzare il gruppo e le autorizzazioni per i file creati all'interno di una directory specifica?

Come contare i file nella directory in Linux

Come organizzare automaticamente tipi simili di file in cartelle specifiche

Come eseguire il tar di tipi di file specifici (estensioni) in una directory

Come contare i file nella directory su Linux

Come entrare in una directory specifica?

Come ripristinare il backup di file/directory specifici utilizzando JetBackup 5?