динамический поиск zip-файлов по определенному пути и распаковка их в ту же папку с распакованными файлами?

динамический поиск zip-файлов по определенному пути и распаковка их в ту же папку с распакованными файлами?

Как выполнить динамический поиск zip-файлов по определенному пути (например, /opt/uploading/"*"/multiple .zipfiles) и распаковать их в ту же папку с zip-файлами?

Ниже функция распаковки нескольких zip-файлов и удаления zip-файлов. Но я хочу, чтобы zip-файлы были там с распакованными файлами.

while true; do
   find -iname '*.zip' > zipindex
   test -s zipindex || break
   for zip in $(cat zipindex); do unzip -o $zip && rm $zip; done
done

решение1

Ну, rm $zipэто удаление файлов .Zip, так что удалите их.

решение2

Это гораздо больше подходит для цикла for, чем для цикла while. Таким образом вы также можете избавиться от ненужного сохранения результатов изfind -iname '*.zip' > zipindex

Вместо этого сделайте что-то вроде этого:

#!/bin/bash

for zip in $(find -iname '*.zip'); do
    unzip -o $zip
done

Это позволит перебрать все строки, в которых найдены продукты.

Конечно, вам следует просто полностью отказаться от bash-скрипта и создать однострочник вроде такого:

find -iname '*.zip' -execdir unzip {} \;

EDIT: Благодаря @don_crissti и @ilkkachu мне удалось избавиться от вызова другого экземпляра оболочки в -exec. -execdir полезно знать!

решение3

Используя GNU Parallel, вы можете сделать это:

find my_dir | grep -E '\.zip$' | parallel unzip
inotifywait -qmre MOVED_TO -e CLOSE_WRITE --format %w%f my_dir | grep  -E '\.zip$' | parallel -u unzip

Таким образом, вам не придется томиться в ожидании следующего zip-файла.

Связанный контент