Невозможно распаковать файл? - PullRequest
0 голосов
/ 28 августа 2009

Я написал скрипт, который пытается извлечь файл tar с ftp-сервера и распаковать его локально.Мне нужно извлечь конкретные файлы из архива tar.Имя файла tarfile содержит дату;Мне нужно иметь возможность выбрать tar-файл на основе этой даты.

abc_myfile_$date.tar - это формат файла, который я извлекаю с ftp-сервера.

Мой текущий код выглядит следующим образом:

for host in ftpserver
do
ftp -inv host <<END_SCRIPT
user username password
prompt
cd remotepath
lcd localpath
mget *myfile_$date*.tar
quit
END_SCRIPT
done

for next in `ls localpath/*.tar`
do
tar xvf $next *required_file_in_tar_file*.dat
done

когда я запускаю скрипт, я не могу распаковать файлы

Я могу получить один tar-файл с ftp-сервера, только если упомяну точное имя этогофайл.Я хотел бы получить файл с именем myfile_$date.После этого я хотел бы извлечь его по локальному пути, чтобы получить указанные файлы в этом tar-файле, имена которого состоят из моих required_files.

Ответы [ 3 ]

2 голосов
/ 28 августа 2009

Вы получаете файл .tar, но распаковываете его с опцией z. Сжатые файлы (те, которые требуют z) обычно имеют префикс .tar.gz. Попробуйте

tar xvf $next *required_file_in_tar_file*.dat
2 голосов
/ 28 августа 2009

Во-первых, если вы хотите использовать подстановочные знаки для имени файла, который вы получаете с сервера, вам нужно использовать mget вместо get. Расширение файла подстановки (*) не работает для команды get.
После того, как вы извлекли файл, операция tar будет работать, как и ожидалось, в большинстве современных версий linux / bsd есть «умный» tar, которому не требуется команда «z», чтобы указать, что файл tar сжат - выяснить, что tar-архив сжат самостоятельно, и распаковать его автоматически, если в системе установлен соответствующий инструмент сжатия / распаковки (bzip2 для файлов .jz, gzip для файлов .gz).

1 голос
/ 28 августа 2009

Я не совсем уверен, но в протоколе FTP нет команды mget, если вы хотите загрузить несколько файлов? (вместо get)

...