2009-08-28 11 views
0

J'ai écrit un shellscript qui essaye de tirer un fichier tar à partir d'un serveur FTP et de le décompresser localement. J'ai besoin d'extraire des fichiers spécifiques de l'archive tar. Le nom de fichier du fichier tar contient une date; Je dois être en mesure de sélectionner un fichier tar basé sur cette date.Impossible de décompresser un fichier?

abc_myfile_$date.tar est le format du fichier que je tire du serveur ftp.

Mon code actuel ressemble à ceci:

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 

quand je lance le script ne suis pas capable de décompresser les fichiers

Je suis en mesure d'obtenir un fichier de goudron unique à partir du serveur ftp seulement si je mentionner le nom exact de ce fichier. Je voudrais obtenir un fichier qui a myfile_$date dans son nom. Après cela, je voudrais l'extraire à un chemin local pour obtenir les fichiers spécifiés dans ce fichier tar dont les noms se composent de mon required_files.

+0

Je suis désolé, mais est-ce PHP? ou Dans quelle langue est-ce? –

+0

c'est un script shell. –

+0

heh ... j'étais loin .. –

Répondre

2

Vous obtenez le fichier .tar, mais le décompressez avec l'option z. Les fichiers compressés (ceux qui nécessitent z) ont normalement le préfixe .tar.gz. Essayez

tar xvf $next *required_file_in_tar_file*.dat 
+0

lorsque j'exécute cette commande en ligne de commande son fonctionnement parfaitement. mais dans le script ne fonctionne pas son goudron: my_required_file_in_tar_file_123.dat: non trouvée dans archieve mais ce fichier est à l'intérieur du archieve ... – musicking123

+0

avez-vous envisagé de citer le deuxième paramètre (celui avec astérisques)? –

+0

j'ai écrit même que vous avez mentionné et essayé avec d'autres types. suis capable de faire tout cela dans la ligne de commande mais quand je cours le script je ne suis pas capable de décompresser les fichiers. – musicking123

1

Je ne suis pas tout à fait sûr, mais le protocole FTP n'a-t-il pas une commande mget si vous voulez télécharger plusieurs fichiers? (au lieu de get)

2

Tout d'abord, si vous voulez utiliser des caractères génériques pour le nom du fichier que vous obtenez à partir du serveur, vous devez utiliser mget au lieu d'obtenir. L'extension de fichier générique (le *) ne fonctionne pas pour la commande get.
Une fois que vous avez extrait le fichier, l'opération tar fonctionnera comme prévu, la plupart des versions modernes de linux/bsd ont un tar 'intelligent', qui n'a pas besoin de la commande 'z' pour spécifier que le fichier tar est compressé. Je vais comprendre que l'archive est compressée par elle-même et la décompresser automatiquement, à condition que l'outil de compression/décompression approprié soit sur le système (bzip2 pour les fichiers .jz, gzip pour les fichiers .gz).