Вложенный цикл for

sudo iwlist wlp2s0 scan | grep ESSID | sort |uniq | awk -F: '{print $2}' 

Выдаст вам список доступных ssidв кавычках, чтобы избавиться от кавычек используйте tr -d \", т.е.

sudo iwlist wlp2s0 scan | grep ESSID | sort |uniq | awk -F: '{print $2}' | tr -d \"

Здесь sortи uniqпечатают только уникальные ssid, а awkзахватывают только имена.

6
28.02.2021, 00:54
3 ответа

Вы не можете сделать это, не разархивировав основные файлы в подпапке -.

Примерно так:

set -e
for f in *.zip
do
  n=`basename -- "${f}".zip`
  mkdir -- "${n}"
  cd -- "${n}"
  unzip../"${f}"
  for p in *.zip
  do
    unzip -l -- "${p}"
  done
  cd..
  rm -rf -- "${n}"
done

Возможно, вам следует проверить, существует ли уже ${n}, и если да, то сгенерировать ошибку. Вы также можете использовать временное имя файла для подкаталога -:

.
dir=`mktemp -d zip-files.XXXXXX`

После этого выполните cd "${dir}"и rm -rf "${dir}".

Обновления:

set -eиспользуется, чтобы убедиться, что если что-то пойдет не так, скрипт остановится. В частности, если mkdir -- "${m}"выйдет из строя, cd -- "${m}"тоже выйдет из строя, и, таким образом, cd..приведет вас на неправильный уровень каталога, и именно здесь rm -rf -- "${n}"становится опасным.

Еще один способ сделать оператор cd..более безопасным — запомнить этот каталог перед циклом forи использовать этот путь следующим образом:

topdir=`pwd`
for...
do
 ...
  cd "$topdir"   # instead of `cd..`
 ...
done

Таким образом rm -rf -- "${n}"будет работать только в $topdir.

Использование временного каталога также сделает вещи намного безопаснее, поскольку таким образом, какими бы ни были имена файлов в верхнем zip-файле, создание/удаление каталога будет работать должным образом.

2
18.03.2021, 22:28

Если установлен GNU Parallel:

extract_list() {
  mkdir "$1"
  cd "$1"
  unzip../"$1".zip
  parallel unzip -l ::: *.zip
  cd..
  rm -rf "$1"
}
export -f extract_list

parallel extract_list {.} ::: *.zip
2
18.03.2021, 22:28

С помощью комбинации libarchive bsdtarи GNU tarвы можете просматривать содержимое этих вложенных архивов без необходимости распаковывать их на диск:

for f in *.zip; do
  bsdtar -cf - --include='*.zip' "@$f" | tar -xf - --to-command='bsdtar tvf -'
done

GNU tarможет направлять элементы архивов в команды при извлечении с помощью --to-command, но поддерживает только форматы архивов tar.

bsdtarподдерживает все виды форматов архивов помимо tar(, включая zip), не имеет эквивалента GNU tar--to-command(AFAIK ), но может конвертировать архивные форматы на лету.

4
18.03.2021, 22:28

Теги

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