Конвейерная обработка результатов команды ls -l в сценарии bash

Не существует «простой» команды, так как 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
0
18.02.2020, 16:47
1 ответ

Поскольку вы работаете в 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--
5
28.04.2021, 23:23

Теги

Похожие вопросы