Ciekawostka: jeśli użyjesz Archive Managera i wyodrębnisz plik .tar.gz, aby mieć zaznaczoną opcję „Zachowaj strukturę katalogów”, otrzymasz tarbomb .
tar -ztf
wyświetla listę wszystkich plików i katalogów w pliku tar. Czy istnieje sposób wylistowania wszystkich plików w pliku tar bez struktury katalogów?
tar xvzf my_tar.tar.gz --transform 's/.*\///'
. Ale niestety nie zmienia to sposobu wyświetlania na liście za pomocąt
zamiastx
.Odpowiedzi:
Nie widzę sposobu, aby to zrobić na stronie podręcznika, ale zawsze możesz filtrować wyniki. Poniższe zakłada, że w nazwach plików nie ma nowego wiersza:
Jak to działa
Ustawiając separator pól na
/
, ostatnie poleawk
wie o ($NF
) to albo nazwa pliku, jeśli przetwarza nazwę pliku, albo pusta, jeśli przetwarza nazwę katalogu (tar
dodaje ukośnik końcowy do nazw katalogów). Mówimy więc,awk
aby wydrukować ostatnie pole, jeśli nie jest puste.źródło
Wykorzystując jedną sugestię Joseph R. może używać regex
[^/]$
dogrep
dla plików patrząc na linie nie kończąc/
.tar tzf archive.tar.gz | grep -e "[^/]$"
źródło
foo/bar
w przeciwieństwie do justbar
. Chceszgrep -Eo '[^/]+$'
(z GNU grep).Zakładając, że żadna z nazw plików nie zawiera nowych linii:
Pierwsze polecenie sed usuwa wszystko przed ostatnim
/
w wierszu, dzięki czemu drukowana jest tylko część nazwy pliku. Drugie polecenie usuwa wiersze, które są teraz puste, tj. Linie kończące się na a/
, które są katalogami.źródło
Za pomocą
pax
(polecenie POSIX do odczytutar
plików):(zawiera listę wszystkich plików niezależnie od ich typu, w tym katalogów).
źródło