Bash находит все zip-файлы в подпапках, связывает файлы и их пути в цикл и выполняет некоторые задачи.

Мне нужно написать скрипт на Bash, который найдет все zip-файлы в подпапках, привяжет файлы и их пути к какому-либо файлу, а затем прокрутит этот список и выполнит некоторые задачи со всеми zip-файлами (например, извлечение, проверка файлов в zip, а затем удалить извлеченные файлы).

Некоторые мысли:

#!/bin/bash
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
echo $DIR   ##current dir
ls $DIR\*.zip

Затем привяжите результат к файлу (например, ziplist.txt). Затем прочитайте этот файл в цикле для каждой строки:

if [[ some result ]] ; then
while IFS= read -r ; do

done <$DIR/ziplist.txt

Как это можно сделать наилучшим образом? Извините, у меня ограниченный опыт работы с bash.


person Vasiliy Vegas    schedule 02.11.2016    source источник


Ответы (2)


Это должно помочь:

for filename in $(find . -name '*.zip'); do
    # Your operations here
done

Если вы хотите продолжать использовать некоторое время, вы можете сделать:

while IFS= read -r ; do

done < <(find . -name '*.zip')
person banetl    schedule 02.11.2016

Вы можете использовать find разными способами, чтобы сделать это.

«Вашим способом» было бы создать временный файл и прокрутить его:

find /your/path -name '*.zip' > /tmp/zips

Если вам не обязательно нужна коллекция файлов, но вы просто хотите выполнить для них задачу по мере их нахождения, вы можете использовать команду find exec:

find /your/path -name '*.zip' -exec /path/to/your/worker/script.sh {} \;

который будет выполнять ваш script.sh для каждого найденного zip-файла с полным путем к zip-файлу в качестве аргумента.

Надеюсь это поможет.

person Hannu    schedule 02.11.2016