Jak wyświetlić listę plików w formacie zip bez dodatkowych informacji w wierszu poleceń

37

W moim wierszu poleceń bash, gdy używam unzip -l test.zip, otrzymuję dane wyjściowe w następujący sposób:

Archive:  test.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
   810000  05-07-2014 15:09   file1.txt
   810000  05-07-2014 15:09   file2.txt
   810000  05-07-2014 15:09   file3.txt
---------                     -------
  2430000                     3 files

Ale interesują mnie tylko wiersze zawierające szczegóły pliku.

Próbowałem wykonać filtrowanie za pomocą grep w następujący sposób:

unzip -l test.zip | grep -v Length | grep -v "\-\-\-\-" | g -v Archive | grep -v " files"

Ale jest długi i podatny na błędy (np. Nazwa pliku Archiwum na tej liście zostanie usunięte)

Czy są jakieś inne opcje z unzip -l (sprawdziłem stronę podręczną rozpakowania i nie znalazłem żadnej) lub inne narzędzie do tego?

Ważne jest dla mnie, aby tak naprawdę nie rozpakować archiwum, ale po prostu sprawdzić, jakie pliki są w środku.

рüффп
źródło
Przyjęta odpowiedź jest znacznie lepsza; ale chcę zauważyć, że wszystko z wieloma grepmożna przekształcić w skrypt Awk, zwykle z dużo większą precyzją. awk 'NR >3 { if (/^ *---/) exit 0; print }'skróci pierwsze trzy wiersze oraz stopkę, a także będzie w zasięgu łatwego wyodrębnienia samej nazwy pliku (wskazówka:) print substr($0, 29).
tripleee
Tak, całkowicie się zgadzam, właśnie dlatego zadaję to konkretne pytanie: mieć lepsze i realne rozwiązanie.
рüффп

Odpowiedzi:

55
zipinfo -1 file.zip

Lub:

unzip -Z1 file.zip

Wymienia tylko pliki.

Jeśli nadal potrzebujesz dodatkowych informacji dla każdej nazwy pliku, możesz:

unzip -Zl file.zip | sed '1,2d;$d'

Lub:

unzip -l file.zip | sed '1,3d;$d' | sed '$d'

Lub (zakładając GNU head):

unzip -l file.zip | tail -n +4 | head -n -2
Stéphane Chazelas
źródło
dzięki potężny sed ... dokładnie to, czego chciałem; Interesujące jest także narzędzie zipinfo, nie wiedziałem o tym.
рüффп
Czy istnieje sposób na zignorowanie katalogów? unzip -Z1 zipfile.zipwypisze: katalog / i katalog / plik.rozszerzenie (uwaga: nazwy katalogów z. są prawdopodobne, więc dodanie | grep .nie działa)
Matt