問題タブ [archive-tar]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
regex - Perlを使用して、ファイル名に基づいていくつかの選択されたファイルを除いて、ディレクトリ内のファイルのリストを配列にプッシュします
Webページからtarballをアップロードし、それを/ tmp /にドロップしてから、このスクリプト(crontabを介して呼び出されます)に次のように要求します。
1.)それを抽出する
2.)ディレクトリ内のすべてのファイル(ファイルのみおよび再帰的)のリストを作成します
3.)各ファイルで文字列を検索し、そのファイル名と一致する文字列の行をファイルに出力します。
(抽出されたtarball)ディレクトリにファイルのリストを作成したい部分まですべてが機能しています。「!」を入れないと 私のコードの6行目の正規表現の前(.bak、.conf、.cfgであるファイルのみに一致)では、@ filelistに12個のファイルしかありません(予想どおり、行のコードによって印刷されます) 13)。
ただし、「!」を付けると 6行目の正規表現の前(これらのファイル以外のすべてに一致することを目的としています)の13行目では、拡張子が.bak、.conf、および.cfgのファイルを含むすべてのファイル名が出力されます。
気にしないファイル名を除いて、(抽出されたtarball)ディレクトリにあるファイル名のコレクションを取得するにはどうすればよいですか?
これは私のコードです。大まかに(削除され、テストされていません)。私はperlの初心者なので、ここにあるものの醜さをお詫びしますが、それはそれです。
linux - Archive-Tar のインストール場所
Perl を使用して、バイオインフォマティクス アプリケーション DistMap のパスを指定してみました。これは私が得たものです。
グーグルで調べてみると、PerlパッケージのArchive::Tarをインストールする必要があることがわかりました。私の質問は、これを抽出する必要がある特定の場所はありますか?
ありがとう、アシュウィン
php - Composer で PEAR.php を取得するにはどうすればよいですか?
Composer でインストールした Phing で動作するように、pear/archive_tar をインストールしました。ただし、次のエラーを受け取りました。
PEAR リポジトリを Composerに追加して更新しましたが、それでも機能しません。
この質問の後半はここで分岐します。
linux - perl archive::tar で MD5 を使用してテープとディスクのファイルを比較すると失敗する
テープ上の tar アーカイブとディスク上のファイル間の MD5 チェックを含むレポートを作成したいと考えています。これを行うスクリプトを作成しましたが、tar ファイルを使用すると正しく動作しますが、テープ上の tar を使用すると失敗します。tar は gnu tar でテープに書き込まれました。
前述のように、ファイル ベースの tar ファイルを使用すると正しく動作しますが、テープで tar を使用すると次のエラーが発生します。
check_archive.pl 行 12 のサブルーチン エントリで初期化されていない値が使用されています。check_archive.pl 行 12 で「厳密な参照」が使用されている間は、文字列 ("") をサブルーチン参照として使用できません。私の $f は定義されていません。
perl - Perlで完全なツリー構造を.tar.bz2ファイルに追加するには?
多数のサブディレクトリにまたがる大量のデータをアーカイブに圧縮しようとしています。Perl スクリプトを Windows および Linux 環境で動作させる必要があるため、組み込みの tar 関数を単純に使用することはできません。Archive::Tar
モジュールは見つかりましたが、そのドキュメントには警告が表示されます。
このメソッド [
create_archive()
] はそのままでは記述されないことに注意してくださいon the fly
。アーカイブを書き出す前に、すべてのファイルをメモリに読み込みます。これが問題である場合は、以下の FAQ を参照してください。
データのサイズが大きいため、「その場で」書きたいと思います。しかし、ファイルの書き込みに関する FAQ には有用な情報が見つかりません。彼らは iterator を使うことを提案しますiter()
:
すべてをメモリにロードせずに tar ファイルを読み取るイテレータ関数を返します。関数が呼び出されるたびに、tarball 内の次のファイルが返されます。
ただし、これはファイルの読み取りについてのみ説明しており、圧縮されたアーカイブの書き込みについては説明していません。だから私の質問は、ディレクトリを取得して、メモリに優しい方法で、つまり最初にツリー全体をメモリにロードせずに、bzip2 圧縮を使用し$dir
てアーカイブに再帰的に追加するにはどうすればよいかということです。archive.tar.bz2
Archive::Tar::Streamed
と を使用してコメントの提案を使用して独自のスクリプトを作成しようとしましたIO::Compress::Bzip2
が、役に立ちませんでした。
すぐに、システムのメモリが不足します。現在のシステムで 32GB の空き容量がありますが、すぐにいっぱいになってしまいます。アーカイブに追加しようとしているディレクトリ内の一部のファイルが 32GB を超えています。
クラスでもStreamed
、アーカイブに追加する前に各ファイルを完全にメモリに読み込む必要があるのだろうか?ファイル自体はバッファでアーカイブにストリーミングされると思いましたが、おそらく、最初にすべてのファイルをメモリに保存する代わりに、メモリにStreamed
1つのファイルのみを完全に必要とし、それをアーカイブに1つずつ追加するだけですか?