GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie unterscheiden Sie ein Verzeichnis nur für Dateien eines bestimmten Typs?

Sie können auch find mit -exec verwenden, um diff:

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

Das Fehlen eines ergänzenden --include ... .

Wir können eine Problemumgehung durchführen, eine Exclude-Datei mit allen Dateien, außer den Dateien, die wir einschließen möchten. Also erstellen wir file1 mit einem alle Dateien finden, die keine Erweiterungen haben, die wir einschließen möchten, sed Fangen Sie den Dateinamen und ist nur :

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

Zum Beispiel:

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

Entnommen aus (einer Version von) der Manpage:

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

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

Es sieht also aus wie -x akzeptiert nur ein Muster, wenn Sie es melden, aber wenn Sie alle Muster, die Sie ausschließen möchten, in eine Datei schreiben (vermutlich eines pro Zeile), könnten Sie das zweite Flag so verwenden:

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

Dabei ist „exclude.pats“:

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

Sie können -x angeben mehr als einmal.

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

Aus dem Abschnitt Verzeichnisse vergleichen von info diff (Auf meinem System muss ich info -f /usr/share/info/diff.info.gz ausführen ):

Um einige Dateien beim Vergleichen von Verzeichnissen zu ignorieren, verwenden Sie die Option „-xPATTERN“ oder „--exclude=PATTERN“. Diese Option ignoriert alle Dateien oder Unterverzeichnisse, deren Basisnamen dem Shell-Muster PATTERN entsprechen. Anders als in der Shell entspricht ein Punkt am Anfang der Basis eines Dateinamens einem Platzhalter am Anfang eines Musters. Sie sollten PATTERN in Anführungszeichen setzen, damit die Shell es nicht erweitert. Zum Beispiel die Option -x '*.[ao]' ignoriert alle Dateien, deren Name mit '.a' oder '.o' endet.

Diese Option wird kumuliert, wenn Sie sie mehr als einmal angeben. Verwenden Sie zum Beispiel die Optionen -x 'RCS' -x '*,v' ignoriert alle Dateien oder Unterverzeichnisse, deren Basisname 'RCS' ist oder auf ',v' endet.


Linux
  1. Wie man in ein bestimmtes Verzeichnis ssh?

  2. CentOS / RHEL:So richten Sie SFTP für Chroot Jail nur für bestimmte Gruppen ein

  3. CentOS / RHEL :So legen Sie das Chroot-Gefängnis für vsftp nur für bestimmte Benutzer fest

  4. Wie listet man bestimmte Dateitypen in rekursiven Verzeichnissen in der Shell auf?

  5. Wie verwendet man den Befehl „mv“, um Dateien außer denen in einem bestimmten Verzeichnis zu verschieben?

So zählen Sie Dateien im Verzeichnis in Linux

So organisieren Sie automatisch ähnliche Dateitypen in bestimmten Ordnern

So tarieren Sie bestimmte Dateitypen (Erweiterungen) in einem Verzeichnis

So zählen Sie Dateien im Verzeichnis unter Linux

Wie verwendet man Inotifywait, um ein Verzeichnis für die Erstellung von Dateien einer bestimmten Erweiterung zu überwachen?

Wie stellt man bestimmte Dateien/Verzeichnisse mit JetBackup 5 wieder her?