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 ..

Jan Hrcek
źródło
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}'
Thor
źródło
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

jaygooby
źródło