2017-02-13 14 views
0

Я хотел бы сжать файлы в нескольких каталогах. По какой-то причине он сжимает только первый каталог (/ Sanbox/logs1), но не остальные остальные каталоги ("/ Sanbox/logs2" "/ Sanbox/logs3" "/ Sanbox/logs4"). Любая помощь будет оценена по достоинству. Вот мой код:Сжатие файлов в нескольких каталогах

#!/bin/bash 

LOG_FILES=("/Sanbox/logs1" "/Sanbox/logs2" "/Sanbox/logs3" "/Sanbox/logs4") 

for file in ${LOG_FILES[file]}/* ; do 
    gzip "${file}" 
done 

ответ

1

Есть две вещи, которые я предлагаю изменить в вашем скрипте. Первый способ, как вы используете массив в for-loop. Попробуйте итерацию с помощью

for file in ${LOG_FILES[@]}; do 
    # code that creates archives 
done 

Использование «@» или «*», как индекс говорит, что весь массив должен быть использован в течение петли.

Во-вторых, как вы создаете путь к каталогу, который используется для создания архива. Попробуйте добавить «/ *» внутри тела цикла for, а не в строку с заданием.

Что-то вроде этого должно сделать трюк.

LOG_FILES=("/Sanbox/logs1" "/Sanbox/logs2" "/Sanbox/logs3" "/Sanbox/logs4") 

for file in ${LOG_FILES[@]}; do 
    gzip "${file}"/*; 
done 

Для получения дополнительной информации об использовании arrayis в Bash, вы можете проверить Bash Begginers Guide: Array variables