у меня есть массивный количество папок, и я хочу заархивировать / gzip / (что угодно) их в 3 или более независимых файла.
Так, например, скажем, у меня есть эти каталоги на моем сервере:
/dir1
/dir2
/dir3
/dir4
/dir5
/dir6
Мне нужно как-то заархивировать их в 3 отдельных zip-файла. Это будет выглядеть так:
collection1.zip
/dir1
/dir2
/dir3
collection2.zip
/dir4
/dir5
/dir6
collection3.zip
/dir7
/dir8
/dir9
Извините, у меня недостаточно нового кредита, чтобы просто прокомментировать. Но что-то подобное должно помочь вам с архивированием папок.
#! /bin/bash
DIR=$1
i=0
arr=()
zipnum=0
cd $DIR
for item in *
do
if [[ -d $item ]]; then
if [ $i -lt 2 ]; then
arr+=($item)
((i++))
else
arr+=($item)
zip ${arr[@]} $zipnum
((zipnum++))
i=0
arr=()
fi
fi
done
((zipnum++))
zip ${arr[@]} $zipnum
Он должен работать (не было времени его протестировать). Сохраните файл как zip.sh и запустите его как ./zip.sh / your / directory / здесь. Что касается передачи файлов, не могли бы вы просто установить ftp-клиент на сервер и ftp файлы?
Приведенный ниже сценарий был протестирован на CentOS 6.5.
Просматривает файлы в указанной папке и добавляет их один за другим в zip-архив (ы) не больше указанного максимального размера. Добавление файлов в zip-архив по одному может вызвать скачки ввода-вывода ЦП или хранилища:
#!/bin/bash
files_folder="/home/username/public_html/"
zip_folder="/home/username/"
zip_maxsize=524288000 # 500 MB
zip_prefix="archive"
zip_suffix=0
cd ${files_folder}
for FILE in $(find . -type f); do
zip_file="${zip_folder}${zip_prefix}-${zip_suffix}.zip"
if [ -f ${zip_file} ]; then
zip_size=$(ls -l ${zip_file} |cut -d' ' -f5)
fi
file_size=$(ls -l ${FILE} |cut -d' ' -f5)
comb_size=$((zip_size + file_size))
if [ ${comb_size} -gt ${zip_maxsize} ]; then
zip_suffix=$((zip_suffix + 1))
zip_file="${zip_folder}${zip_prefix}-${zip_suffix}.zip"
fi
zip -q ${zip_file} ${FILE}
done
Я нашел простое решение.
Сначала я составил список всех папок, которые мне нужно заархивировать:
ls > list.txt
Чем я удалил ./
и ../
из списка.
После этого я разделил этот список с помощью текстового редактора на 5 разных файлов, например. listPart1
, listPart2
, listPart3
...
Я поместил эти списки в папку, содержащую все папки, которые необходимо заархивировать, и выполнил эту команду из этой папки для каждого списка:
cat listPart1 | zip -r@ part1.zip