GNU/Linux >> Znalost Linux >  >> Linux

Jak odlišíte adresář pouze pro soubory určitého typu?

Můžete také použít find s -exec pro volání diff:

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

Absence komplementárního -- include ... .

Můžeme udělat jedno řešení, soubor vyloučení se všemi soubory, ale to, co chceme zahrnout. Takže vytvoříme file1 s najít všechny soubory, které nemají přípony, které chceme zahrnout, sed zachytit název souboru a je jen :

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

Například:

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

Převzato z (verze) manuálové stránky:

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

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

Takže to vypadá jako -x při nahlášení přijímá pouze jeden vzor, ​​ale pokud vložíte všechny vzory, které chcete vyloučit, do souboru (pravděpodobně jeden na řádek), můžete použít druhý příznak takto:

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

kde exclude.pats je:

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

Můžete zadat -x více než jednou.

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

Ze sekce Porovnání adresářů info diff (v mém systému musím provést info -f /usr/share/info/diff.info.gz ):

Chcete-li některé soubory při porovnávání adresářů ignorovat, použijte volbu '-xPATTERN' nebo '--exclude=PATTERN'. Tato volba ignoruje všechny soubory nebo podadresáře, jejichž základní názvy odpovídají vzoru shellu PATTERN. Na rozdíl od shellu se tečka na začátku základny názvu souboru shoduje se zástupným znakem na začátku vzoru. PATTERN byste měli uzavřít do uvozovek, aby jej shell nerozšiřoval. Například možnost -x '*.[ao]' ignoruje všechny soubory, jejichž název končí na '.a' nebo '.o'.

Tato možnost se shromažďuje, pokud ji zadáte více než jednou. Například pomocí možností -x 'RCS' -x '*,v' ignoruje jakýkoli soubor nebo podadresář, jehož základní název je „RCS“ nebo končí „,v“.


Linux
  1. CentOS / RHEL :Jak nastavit SFTP na Chroot Jail pouze pro konkrétní skupinu

  2. CentOS / RHEL :Jak nastavit chroot jail pro vsftp pouze pro konkrétní uživatele

  3. Jak použít příkaz 'mv' k přesunutí souborů kromě souborů v konkrétním adresáři?

  1. Jak získat rozdíl (pouze doplňky) mezi dvěma soubory v linuxu

  2. Jak v Linuxu odstraníte soubory starší než konkrétní datum?

  3. Jak vynutím skupinu a oprávnění pro vytvořené soubory v konkrétním adresáři?

  1. Jak extrahovat soubory Tar do konkrétního nebo jiného adresáře v Linuxu

  2. Jak přemapovat klíče pod Linuxem pouze pro konkrétní klávesnici

  3. Jak nastavit výchozí oprávnění k souborům pro všechny složky/soubory v adresáři?