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>