gzipping ряд каталогов и создания сжатого файла tar

Мой удар fu не, каково это должно быть.

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

Существует (по крайней мере) два способа, которыми я могу думать о доказательстве списка файлов:

  1. читайте из файла (скажите что config.txt). Файл будет содержать список каталогов к на молнии ИЛИ

  2. трудно кодируйте список непосредственно в сценарий удара

Первая опция кажется более простой (хотя менее изящный).

Эти две проблемы, с которыми я сталкиваюсь, состоят в том, что я не уверен, как сделать следующее:

  • предоставьте список каталогов к сценарию оболочки
  • выполните итерации по списку каталогов

Кто-то мог предложить в нескольких строках, как я могу сделать это?

BTW, я работаю на Ubuntu 10.0.4

14
задан morpheous 27 July 2010 в 06:11
поделиться

4 ответа

Вы можете создать сжатый tar в командной строке следующим образом:

tar czvf mytar.tar.gz dir1 dir2 .. dirN

Если вы хотите сделать это в сценарии bash и передать каталоги в качестве аргументов сценарию, эти аргументы будут в $ @ . Итак, у вас есть:

tar czvf mytar.tar.gz "$@"

Если это есть в скрипте (скажем, myscript.sh ), вы должны назвать это как:

./myscript.sh dir1 dir2 .. dirN

Если вы хотите читать из списка (ваш вариант 1) вы можете сделать это так (это не работает, если в именах каталогов есть пробелы):

tar czvf mytar.tar.gz $(<config.txt)
29
ответ дан 1 December 2019 в 09:11
поделиться

создать два файла: список файлов - поместите все требуемые каталоги (по одному в одну строку)

и создайте простой сценарий bash:

    #!/bin/bash


for DIR in `cat filelist` 
do 
    if [ -d $DIR ] 
    then
        echo $DIR
    fi
done
0
ответ дан 1 December 2019 в 09:11
поделиться

Просто используйте нулевой байт в качестве разделителя, когда вы записываете имена файлов / каталогов в файл. Таким образом, вам не нужно беспокоиться о пробелах, символах новой строки и т. Д. В именах файлов!

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 
0
ответ дан 1 December 2019 в 09:11
поделиться

Вы можете экспортировать переменную, например DIRECTORIES = "DIR1 DIR2 DIR3 ...." А в скрипте нужно использовать переменную вида tar czvf $ КАТАЛОГИ

0
ответ дан 1 December 2019 в 09:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: