Gzipping набор каталогов и создание tar сжатого файла
Мой bash fu - это не то, что должно быть.
Я хочу создать небольшую партию script, которая скопирует список каталогов в новый zip файл.
Есть (по крайней мере) два способа, которые я могу представить, чтобы проверить список файлов:
-
прочитайте из файла (скажем, config.txt). Файл будет содержать список каталогов, в которые будет зависеть OR
-
скопируйте список непосредственно в bash script
Первый вариант кажется более простым (хотя и менее элегантным).
Две проблемы, с которыми я столкнулся, это то, что я не уверен, как сделать следующее:
- предоставить список каталогов в оболочку script
- итерация по списку каталогов
Может ли кто-нибудь предложить несколько строк, как я могу это сделать?
Кстати, я работаю на Ubuntu 10.0.4
Ответы
Ответ 1
Вы можете создать gzipped tar в командной строке следующим образом:
tar czvf mytar.tar.gz dir1 dir2 .. dirN
Если вы хотите сделать это в bash script и передать каталоги в качестве аргументов в script, эти аргументы окажутся в [email protected]
. Итак, у вас есть:
tar czvf mytar.tar.gz "[email protected]"
Если это в script (скажем, myscript.sh
), вы бы назвали это как:
./myscript.sh dir1 dir2 .. dirN
Если вы хотите читать из списка (ваш вариант 1), вы можете сделать это так (это не работает, если в именах каталогов есть пробелы):
tar czvf mytar.tar.gz $(<config.txt)
Ответ 2
создайте два файла:
filelist - поместить все необходимые каталоги (один на одну строку)
и создайте простой bash script:
#!/bin/bash
for DIR in `cat filelist`
do
if [ -d $DIR ]
then
echo $DIR
fi
done
Ответ 3
Вы можете экспортировать переменную типа DIRECTORIES = "DIR1 DIR2 DIR3...."
И в script вам нужно использовать переменную типа
tar czvf $ДИРЕКТОРИИ
Ответ 4
Просто используйте нуль-байты как разделитель, когда вы пишете имена файлов/каталогов в файл. Таким образом вам не нужно беспокоиться о пространствах, символах перевода строк и т.д. В именах файлов!
printf "%s\000" */ > listOfDirs.txt # alternative: find ... -print0
while IFS="" read -r -d '' dir; do command ls -1abd "$dir"; done < listOfDirs.txt
tar --null -czvf mytar.tar.gz --files-from listOfDirs.txt
Ответ 5
В случае, если вы ищете сжатие каталога, может помочь следующая команда.
pbzip2 сжимает каталоги с использованием параллельной реализации
tar cf <outputfile_name> --use-compress-prog=pbzip2 <directory_name>