2009-08-28 10 views
0

私はftpサーバからtarファイルを取り出し、それをローカルにuntarしようとするシェルスクリプトを書いています。私はtarアーカイブから特定のファイルを抽出する必要があります。 tarファイルのファイル名には日付が含まれています。この日付に基づいてtarファイルを選択できる必要があります。ファイルをuntarできませんか?

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サーバから単一のtarファイルを取得することができる午前をuntarすることができないですIそのファイルの正確な名前を記述します。その名前にmyfile_$dateというファイルがあります。この後、ローカルパスに展開して、名前がrequired_filesであるtarファイル内の指定されたファイルを取得したいと思います。

+0

申し訳ありませんが、このPHPですか?またはこれは何の言語ですか? –

+0

これはシェルスクリプトです。 –

+0

heh ...私は道を離しました.. –

答えて

2

.tarファイルを取得しますが、zオプションを使用して解凍します。圧縮ファイル(zが必要なファイル)のプレフィックスは.tar.gzです。お試しください

tar xvf $next *required_file_in_tar_file*.dat 
+0

私はコマンドラインでこのコマンドを実行すると完全に動作します。 が、スクリプトでその タール動作していない:my_required_file_in_tar_file_123.dat:archieve で見つかったが、そのファイルがarchieve内ではありませんが... – musicking123

+0

あなたは二番目のパラメータ(アスタリスク付き1)を引用検討していますか? –

+0

私はあなたと同じことを書いていますが、他のタイプで試してみました。 コマンドライン でこれを行うことはできますが、スクリプトを実行するとファイルを解凍できません。 – musicking123

1

私は確信していませんが、複数のファイルをダウンロードする場合は、FTPプロトコルにコマンドmgetがありませんか? (getの代わりに)

2

まず、サーバーから取得しているファイル名にワイルドカードを使用する場合は、getではなくmgetを使用する必要があります。ワイルドカードファイル展開(*)は、getコマンドでは機能しません。
ファイルを引っ張ってしまえば、tar操作は期待通りに機能しますが、現代版のlinux/bsdはtarファイルが圧縮されていることを指定する 'z'コマンドを必要としない 'smart' tarを持っています。適切な圧縮/解凍ツールがシステムにインストールされていれば、tarballは自動的に圧縮されて解凍されます(.zzファイルの場合はbzip2、.gzファイルの場合はgzip)。

関連する問題