Мой удар fu не, каково это должно быть.
Я хочу создать немного сценария пакетной обработки, который скопирует список каталогов в новый zip-файл.
Существует (по крайней мере) два способа, которыми я могу думать о доказательстве списка файлов:
читайте из файла (скажите что config.txt). Файл будет содержать список каталогов к на молнии ИЛИ
трудно кодируйте список непосредственно в сценарий удара
Первая опция кажется более простой (хотя менее изящный).
Эти две проблемы, с которыми я сталкиваюсь, состоят в том, что я не уверен, как сделать следующее:
Кто-то мог предложить в нескольких строках, как я могу сделать это?
BTW, я работаю на Ubuntu 10.0.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)
создать два файла: список файлов - поместите все требуемые каталоги (по одному в одну строку)
и создайте простой сценарий bash:
#!/bin/bash
for DIR in `cat filelist`
do
if [ -d $DIR ]
then
echo $DIR
fi
done
Просто используйте нулевой байт в качестве разделителя, когда вы записываете имена файлов / каталогов в файл. Таким образом, вам не нужно беспокоиться о пробелах, символах новой строки и т. Д. В именах файлов!
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
Вы можете экспортировать переменную, например DIRECTORIES = "DIR1 DIR2 DIR3 ...." А в скрипте нужно использовать переменную вида tar czvf $ КАТАЛОГИ