Не существует «простой» команды, так как unzip изначально не предлагает эту функциональность. Вы должны попросить его извлечь некоторые или все файлы и обработать их самостоятельно. Вот еще один способ:
zipinfo -1 Ten.zip | while IFS= read -r filename
do
unzip -p Ten.zip "$filename" | sed 2q
done
Разница здесь в том, чтобы использовать zipinfo
для вывода списка содержимого архива, по одному в строке; затем мы читаем эти имена файлов строка за строкой и просим unzip
извлечь этот файл на экран (с помощью -p
, чтобы имя файла не печаталось ), а затем передать это через sed
. ], чтобы он печатал (по умолчанию ), выходя на строке 2.
Это может завершиться ошибкой, если у вас есть заархивированные файлы с символами новой строки в их имени; вы бы этого не сделали, потому что unzip искажает имя файла при извлечении:
$ touch file$'\n'name
$ zip foo.zip file*name
$ rm file*name
$ zipinfo -1 foo.zip
file^Jname
$ unzip foo.zip
Archive: foo.zip
extracting: filename
$ ls -lrt
...
filename
Поскольку вы работаете в Linux, вместо этого вам следует изучить команду stat
с правильным форматом (-c
,--format
). Малоизвестная функция, формат принимает спецификаторы длины стиля C -, поэтому попробуйте, например,:
stat -c 'File: %-40n Size: %6s Flags: %8A' *
В формат можно помещать произвольные строки и даже переводить в него строки (, используя синтаксис $'string'
):
stat -c $'--------------\nFile: %n\nSize: %s\nFlags: %A' /boot/*
--------------
File: /boot/abi-4.13.0-45-generic
Size: 1501528
Flags: -rw-r--r--
--------------
File: /boot/config-4.13.0-45-generic
Size: 213220
Flags: -rw-r--r--
--------------
File: /boot/config-4.15.0-72-generic
Size: 217468
Flags: -rw-r--r--
--------------
File: /boot/config-4.15.0-74-generic
Size: 217503
Flags: -rw-r--r--
--------------
File: /boot/config-4.15.0-76-generic
Size: 217503
Flags: -rw-r--r--