FTP 接続経由でファイルを解凍するにはどうすればいいですか?

FTP 接続経由でファイルを解凍するにはどうすればいいですか?

FTP 経由でリモート サーバーに接続し、ディレクトリ リストを取得しました。リストには zip ファイルがいくつかあります。

ファイルを解凍することは可能ですか (例: test.zip)? 可能であれば、コマンドは何ですか?

答え1

FTP 接続でファイルを解凍することはできません。FTP は「File Transfer Protocol」の略で、リモート側でのファイルの転送と部分的な管理のみを目的として設計されており、コマンドを実行するものではありません。アーカイブを解凍するには、tar、bzip2 などのプログラムを実行する必要がありますが、FTP 接続ではそれができません。

SSH などのコマンドを実行できる別のセッションが必要です。または、アーカイブをマシン上で解凍し、その内容を FTP 経由で転送します。この場合、FTP のオーバーヘッドのため、小さなファイルが多数あるとかなり遅くなります。

答え2

少し文脈から外れた回答ですが、確実に機能します。その ftp ディレクトリで Apache + php を実行している場合は、そのフォルダーに zip ファイルをアップロードして、以下を作成しますextractor.php

$zip = new ZipArchive;
if ($zip->open('my_zip.zip') === TRUE) {
    $zip->extractTo('/path/to/my/zip');
    $zip->close();
    echo 'ok';
}

次に、URL (例: http://example.com/extractor.phpbingo php) を入力すると、その zip ファイルが抽出されます。

答え3

次のコマンドを使用して ftp リソースをマウントすると、これを実行できますcurlftpfs

curlftpfs ftp://ftp.server.org/ /path/to/mountpoint

それから

unzip /path/to/mount/test.zip

答え4

あなたの目標はそれを解凍することです外部サーバー上、またはアーカイブのコンテンツを取得しますか?自分のコンピュータに?

最初のケースは FTP では解決されませんが、他の回答で説明されているように SSH または同様の手法によって解決されます。

最初にファイルを転送してから解凍せずに、解凍したコンテンツを自分のコンピュータに「直接」取得したい場合は、たとえばFTPサイトをフォルダとしてマウントし、通常のzipファイルとしてローカルコンピュータ上の場所に解凍することができます。これにより、実際にはファイルの内容を解凍プログラムに直接ストリームするので、技術的にはするファイル全体を転送しますが、圧縮された状態のみで転送します (おそらくトラフィックを節約します)。明示的な中間ステップなしで、コンテンツがローカル コンピューターに直接表示されます。

ZIPファイルの一部だけを解凍する場合、ZIPファイル形式がどのように規定されているかわかりません。全体ただし、ファイル全体、またはそのファイルに対応する圧縮部分のみを転送することはできません。この種の選択的転送が不可能になる技術的な理由は特に見当たりません (FTP プロトコルでは、再開を可能にするために部分的なファイルのみを転送できます)。

関連情報