Создание bash .tar

Я пытаюсь создать файл .tar.gz с файлами или каталогами в параметрах для резервного копирования.

Однако, когда я создаю архив .tar.gz, у меня есть эта ошибка:

tar: path_directory_1: cannot stat: No such file or directory
tar: path_directory_2 : cannot stat: No such file or directory
tar: Stopped with failed status due to previous errors 

Как я построил архив:

tar zcvf $dirbackup/backup-$backupDate.tar.gz $string

, где string:

old_IFS=$IFS

IFS=$'\n'

string="";

for line in $(cat $1); do

      string="$string $line"

done

IFS=$old_IFS

$1: файл с файлами путей и файлами путей к save [. d4]

Пример из $1 содержимого (только пути каталогов для сохранения):

~/Documents/MIAGE/L3/semestre5/web
~/Documents/MIAGE/L3/semestre5/communication/

Результат с установкой -x:

+ tar zcvf /var/backups/mesbackups/backup-09-11-2016-13-58/backup-09-11‌​-2016-13-58.tar.gz '~/Documents/MIAGE/L3/semestre5/web' '~/Documents/MIAGE/L3/semestre5/communication/'
tar: ~/Documents/MIAGE/L3/semestre5/web : cannot stat : No such file or directory 
tar: ~/Documents/MIAGE/L3/semestre5/communication : cannot stat : No such file or directory 
tar: Stopped with failed status due to previous errors 

Когда я запускаю эту команду в оболочке, которая работает ...

tar zcvf /var/backups/mesbackups/test/backup-09-11‌​-2016-13-58.tar.gz ~/Documents/MIAGE/L3/semestre5/web ~/Documents/MIAGE/L3/semestre5/communication/ 

Как я могу сделать с моим скриптом? Это похоже на работу без квот?

1
задан 10 November 2016 в 00:24

1 ответ

Если $1 - это имя файла, содержащего список файлов для добавления в архив, по одному на строку, тогда вы должны просто использовать форму --files-from FILE в tar

[ f1]

Если вы по какой-то причине не можете использовать --files-from, то следующим лучшим вариантом является, вероятно, использование массива bash

mapfile -t files < "$1"

tar zcvf "$dirbackup"/backup-"$backupDate".tar.gz "${files[@]}"

, хотя это может иметь проблемы, если количество файлов в $1 очень велико.

1
ответ дан 23 May 2018 в 04:23
  • 1
    Те же ошибки с двумя вашими решениями. – Nicolas Lamblin 9 November 2016 в 16:52
  • 2
    На самом деле следующей лучшей альтернативой tar ... --files-from "$1" является xargs tar ... < "$1". Основная причина, по которой у кого-то нет --files-from, заключается в том, что они не используют GNU tar, что делает возможным, что другие инструменты GNU, такие как Bash, тоже отсутствуют. xargs должен быть тем не менее. – David Foerster 9 November 2016 в 19:09
  • 3
    @DavidFoerster, те же ошибки с xargs, поэтому архив пуст (даже если он создан). – Nicolas Lamblin 10 November 2016 в 00:18

Другие вопросы по тегам:

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