Znajdź nazwę folderu w katalogu głównym w pliku ZIP


3

Używam Fedory 17 i bash jako mojej powłoki. Mam określony plik zip, który ma tylko jeden folder w katalogu głównym. Tj. Po rozpakowaniu pliku zip widzę następujące:

> unzip myzip.zip
> ls
myzip.zip folderThatWasInsideZip

Przypuśćmy, że wiesz, że w pliku zip jest tylko jeden folder, jak mogę znaleźć nazwę głównego folderu w pliku zip , bez rozpakowywania pliku zip?

Szukam jednej linijki, która pozwoliłaby mi zrobić coś takiego:

> <command> myzip.zip
folderThatWasInsideZip

Wiem, że istnieją sposoby na wyświetlenie listy wszystkich plików w zipie less, ale to pokazuje wszystkie pliki w podkatalogach itp. Chcę tylko znać nazwę jednego folderu. Wiem, że brakuje mi czegoś podstawowego ..


Opcja -l służy do wyświetlania plików zamiast rozpakowywania pliku zip. zobacz rozpakowanie człowieka.
l1zard

Odpowiedzi:


3

To polecenie wydaje się robić, co chcesz:

unzip -qql myzip.zip | head -n1 | tr -s ' ' | cut -d' ' -f5-

Lub z GNU sed:

unzip -qql myzip.zip | sed -r '1 {s/([ ]+[^ ]+){3}\s+//;q}'

To dałoby mi odpowiedź, ale rozpakowuje plik zip. Muszę to zrobić bez rozpakowywania zamka błyskawicznego, pisząc w pytaniu. Czy jest jakiś sposób?
Jan Hrcek

@JanHrcek: patrząc na ślady gdb unzipi unzip -lpokazuje, że inflate_block()funkcja nie jest wywoływana za pomocą -l, tzn. Plik nie jest dekompresowany, odczytywane są tylko metadane.
Thor

Tak, masz rację :) Przepraszamy.
Jan Hrcek

3

unzip -Zwywołuje tryb Zipinfo , co oznacza, że ​​możesz zadzwonić unzip -Z -1 myzip.zip | head -1po ten sam wynik, ale jest o wiele bardziej zwięzły

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.