7zip: Jak wykluczyć typy plików?

9

Chcę wykluczyć następujące typy plików:

  • epub
  • pdf
  • HTML (również wielkie litery)
  • azw3
  • mobi
  • opf
  • tekst

Mam do tej pory to, co wydaje się nie działać, pojawia się błąd z napisem „Nieprawidłowa linia poleceń”.

7z e "-x!*.epub" "-x!*.pdf" "-x!*.html" "-x!*.azw3" "-x!*.mobi" "-x!*.txt" "-x!*.HTML" "-x!*.opf" *

Próbowałem także powyższego polecenia bez podwójnych cudzysłowów.

Utworzyłem powyższe polecenie przy użyciu informacji stąd (dla systemu Windows), ale wydaje się, że nie działa ono w systemie Linux.

daka
źródło

Odpowiedzi:

10

7zakceptuje tylko jedno archiwum w swoich argumentach, ale przekazujesz symbol wieloznaczny, który rozwija się do pełnej zawartości bieżącego katalogu roboczego; Inną kwestią jest to, że również symbole wieloznaczne w argumentach również się rozwiną, czy to w cudzysłowach, czy w cudzysłowach.

Dlatego powinieneś wyodrębnić tylko jedno archiwum dla każdego polecenia; powinieneś usunąć symbol wieloznaczny na końcu, podać pojedyncze archiwum i zacytować argumenty:

7z e '-x!*.epub' '-x!*.pdf' '-x!*.html' '-x!*.azw3' '-x!*.mobi' '-x!*.txt' '-x!*.HTML' '-x!*.opf' archive.7z

Aby wyodrębnić wiele archiwów jednocześnie, możesz użyć wielu metod:

  • bash:
for archive in *.7z; do 7z e '-x!*.epub' '-x!*.pdf' '-x!*.html' '-x!*.azw3' '-x!*.mobi' '-x!*.txt' '-x!*.HTML' '-x!*.opf' "$archive"; done
  • find:
find . -maxdepth 1 -type f -iname "*.7z" -exec 7z e '-x!*.epub' '-x!*.pdf' '-x!*.html' '-x!*.azw3' '-x!*.mobi' '-x!*.txt' '-x!*.HTML' '-x!*.opf' {} \;
kos
źródło
Mam wiele archiwów, które wymagają wyodrębnienia, stąd użycie symbolu wieloznacznego na końcu do wyodrębnienia WSZYSTKICH archiwów.
daka
@sudoman Czy na pewno jest to obsługiwane przez 7z? Chcesz wypróbować jedno archiwum?
Kos,
Testowane, okazuje się, że 7zip nie pozwala na użycie znaku wieloznacznego do wybrania wielu plików w danym katalogu.
daka,
@Ron Zgadzam się, ale problem polega na tym, że OP nie może wyodrębnić wielu archiwów jednocześnie; jednak przegłosowałem twój post
kos
@sudoman Znalazłem kolejną wadę w twoim oryginalnym poleceniu, a także dodałem kilka sposobów na wyodrębnienie wielu archiwów naraz
Kos
10

Od man 7z:

-x[r[-|0]]]{@listfile|!wildcard}
              Exclude filenames

Aby wykluczyć plik (lub typy), możesz użyć następującego polecenia:

7z a [email protected] backup.7z /whatever/dirs/or/files

Uwaga -xrzamiast -x. rWskazuje rekurencyjne więc można go dopasować wyłączonych plików w głębokich hierarchii folderów

Plik exclude.txtjest listą oddzieloną znakami powrotu karetki:

*.epub
*.pdf
*.html 
*.HTML
*.azw3
*.mobi
*.opf
*.txt
Ron
źródło
-2

Jeśli chcesz wykluczyć pełny katalog (możesz mieć ten plik rozszerzenia oddzielony w katalogu)

 7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on ~/bkpFile_$(date +"%d_%b_%Y").1.7z /home/ubuntu/projectfile -mx0 '-xr!vendor' '-xr!view' '-xr!documents' 

Tutaj wykluczono katalog dostawców , widoków i dokumentów .

manish1706
źródło
1
Dlaczego sudo? A co to dodaje do istniejących odpowiedzi?
muru