2009-08-28 3 views
0

Я написал shellscript, который пытается вытащить 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 

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

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

+0

Извините, но является ли это PHP? или на каком языке это? –

+0

это сценарий оболочки. –

+0

heh ... i was was off off. –

ответ

2

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

tar xvf $next *required_file_in_tar_file*.dat 
+0

, когда я выполняю эту команду в командной строке, ее работа отлично. , но в сценарии ее не работает дегтя: my_required_file_in_tar_file_123.dat: не найден в АРХИВ но этот файл находится внутри ... – musicking123

+0

АРХИВ Вы рассмотрели процитировать второй параметр (один звездочками)? –

+0

Я написал то же, что и у, упомянутый и пробовал с другими типами. Я могу сделать все это в командной строке , но когда я запустил скрипт, я не смог разобрать файлы. – musicking123

1

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

2

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