0

私は、ftp サーバーから tar ファイルをプルして、ローカルで untar しようとするシェルスクリプトを作成しました。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

スクリプトを実行すると、ファイルを untar できません

そのファイルの正確な名前に言及した場合にのみ、ftp サーバーから単一の tar ファイルを取得できます。myfile_$dateを名前に含むファイルを取得したいと思います。この後、それをローカル パスに抽出して、その tar ファイルで指定されたファイルを取得したいと思いrequired_filesます。

4

3 に答える 3

2

まず、サーバーから取得するファイル名にワイルドカードを使用する場合は、get ではなく mget を使用する必要があります。get コマンドでは、ワイルドカード ファイル展開 (*) は機能しません。
ファイルをプルすると、tar 操作が期待どおりに機能します。最新バージョンの linux/bsd には「スマート」tar があり、tar ファイルが圧縮されていることを指定する「z」コマンドは必要ありません。適切な圧縮/解凍ツールがシステム上にあれば、tarball が独自に圧縮されていることを確認し、自動的に解凍します (.jz ファイルの場合は bzip2、.gz ファイルの場合は gzip)。

于 2009-08-28T07:15:21.550 に答える
2

ファイルを取得し.tarますが、オプションで解凍しzます。圧縮ファイル ( が必要なものz) には、通常、.tar.gz接頭辞があります。試す

tar xvf $next *required_file_in_tar_file*.dat
于 2009-08-28T07:09:04.463 に答える
1

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

于 2009-08-28T07:07:38.600 に答える