環境はlinux mintです。
分割zip(zip, z01, z02...) の解凍テストを行います。
対象となるzipが百数個くらいあるので、バッチ処理(コマンドライン)で行いたいのですが
都合のいいソフトが見当たりません。
何かいいソフトがあれば教えて頂けませんか。
(理想はwinzipコマンドライン版みたいなものを考えています。
 なおwineでwinzipインストはインストーラが正常に動作せず失敗しています。)


もしくは、上記を行える別の案でも構いません。よろしくお願いします。
(Linux側のフォルダ共有してwin側で処理 又は HDD移動等以外で)

質問者からの補足コメント

  • へこむわー

    回答ありがとうございます。試してみましたが単純なファイル分割では無いようです。

    バイナリ結合を試した所、壊れましたファイルが作成されました。
    (winrarや7z等でテストするとファイル破損と判定されます。)
    http://askubuntu.com/questions/31298/how-to-extr …
    ("2nd ADDED"の所と同じ結果)

    http://ubuntuforums.org/showthread.php?t=1418104
    で見る限り
    cat後、結合障害部分をzip -F オプションで修復かけているようなので
    それも真似してみましたが、失敗します。(解凍出来ないファイルが作成されました。)

    No.1の回答に寄せられた補足コメントです。 補足日時:2015/11/05 02:37
  • うーん・・・

    たぶん、WinZipの分割機能が使われているみたいです。

    補足を記載します。
    現在テストを行いたいzipですが、簡単に言うとサーバのバックアップファイルで
    定期的にバッチでバックアッププログラムが動作し、
    win環境からlinux環境にコピーが行われています。

    バックアッププログラム自体は自分が作成したもので無いため
    ソースが無く、ドキュメントも無いため利用されているライブラリ等は不明です。
    ただ、動作しているPCにWinZipがインストールされている事を確認しており、
    他にそれらしき物が見当たらない事から、たぶんこれを利用しているものと思われます。
    試しに、WinZIpをGuiで動作させた所、同じファイルが作成可能でした。
    (wzzipの -ysオプション)

    他の解凍ソフトでもz01形式は対応していましたので、zip共通規格かと思っていました。
    申し訳ないです。

    No.2の回答に寄せられた補足コメントです。 補足日時:2015/11/05 20:18
  • うーん・・・

    結論から書くと出来ませんでした。
    なお、パスワード設定はされていません。
    分割時のオプション設定が不明のため、暗号化の件はわからないので
    別途手動で分割zipを作成し確認しましたが、成功しませんでした。

    バイナリを調べた限り、zip固有先頭配列("PK")はz01側に入っており、
    zip側には無いため
    バイナリ結合するのであれば、サイトに紹介されているとおり、
    z01側が先に来るべきだと思われます。
    cat 1.z01 1.zip > 11.zip 

    ただ、ネットを検索する限り、バイナリ結合ネタは多々存在するので
    もしかしたら、バージョンにより分割の仕様が変わった可能性もあります。

    使用しているのは最新版のwinzip20.0(11569j)64ビット版となります。
    手動で分割zipを作成した時の手順ですが、
    WinZipのメニュー→ツール→分割Zipで作成しています。

    No.3の回答に寄せられた補足コメントです。 補足日時:2015/11/06 03:26

このQ&Aに関連する最新のQ&A

A 回答 (4件)

↓これを試してみてください。


zip -FF xxx.zip --out all.zip ← .zip ファイルのみ指定で自動的に分割ファイルを統合 all.zip へ
    • good
    • 1
この回答へのお礼

正常に結合出来ました。(-▽-♪
zipの-FFには修復以外の機能あったのですね。全然知りませんでした。
-T オプションは残念ながら、同時に指定出来ないみたいなので、
結合→テスト→ファイル破棄でスクリプト組んで対応します。

ホントありがとうございます。

お礼日時:2015/11/06 20:28

WinZipでかつ暗号化やパスワード設定がされていないという前提なら cat コマンドで接続したファイルを unzip コマンドで解凍できると思います。

(そのWebサイトは間違っています)

例えば、
分割されたファイルのファイル名が 1.zip、1.z01、1.z02 の場合は、

cat 1.zip 1.z01 1.z02 > 11.zip ← 11.zip へ連結

で連結できます。
分割されたファイルのファイル名が 1.z01、1.z02、1.z03 の場合は、
(1.zip とういファイルがない場合)

cat 1.z01 1.z02 1.z03 > 11.zip ← 11.zip へ連結

で連結できます。
unzip 11.zip で解凍でき、この場合 11 とういファイルができます。
この回答への補足あり
    • good
    • 0

その分割ZIPファイルを生成したソフトは何かによって方法が異なります。

この回答への補足あり
    • good
    • 0

Linuxなら、catで結合、unzipで展開では?

この回答への補足あり
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q起動しているサービスを確認するコマンド

初歩的な質問で恐縮ですが、ご教示いただけますと幸いです。

起動しているサービスを確認するために以下の2つのコマンドを打ってみるのですが、結果(出て来るサービス名)が違います。
このコマンドの違いについてご教示いただけますでしょうか。

(1)service --status-all
(2)chkconfig --list

Aベストアンサー

(1)service --status-all

サービスの現在のステータスを調べるコマンド

(2)chkconfig --list

OSのブート時に自動起動するサービスを調べるコマンド

違いが出るのは、
・ブート後に手動あるいは他のコマンドから起動したサービス
・ブート後に手動あるいは他のコマンドから、あるいはエラーで停止したサービス
・ブート後に実行はされるがすぐに停止して常駐しないサービス (ntpdate とか)

あるいは、(1)ではサービス名が表示されない物もあるので、どのサービスがどんなステータス出力をするのか知っておく必要もありますね。(service network statusとか)

Q文字列を日付に変換でParseException

文字列を日付に変換するところで、「ParseException: Unparseable date: "2013/08/06" 
 at java.text.DateFormat.parse(DateFormat.java:335) 」とエラー表示されました。

実際のコーディングは
Date sgndate = new Date();
if(!StringUtil.isNull(rs.getString("sgnymd"))){
String lstdaysgn = rs.getString("sgnymd");
lstdaysgn = lstdaysgn.substring(0,4) + "/" + lstdaysgn.substring(5,7) + "/" +
                              lstdaysgn.substring(8,10);
sgndate = DateFormat.getDateInstance().parse(lstdaysgn); ・・・・・・・・・ここでエラー発生
}

どこが悪いのか解りません。
よろしくご教授ください。

文字列を日付に変換するところで、「ParseException: Unparseable date: "2013/08/06" 
 at java.text.DateFormat.parse(DateFormat.java:335) 」とエラー表示されました。

実際のコーディングは
Date sgndate = new Date();
if(!StringUtil.isNull(rs.getString("sgnymd"))){
String lstdaysgn = rs.getString("sgnymd");
lstdaysgn = lstdaysgn.substring(0,4) + "/" + lstdaysgn.substring(5,7) + "/" +
                              lstdaysgn.substring(...続きを読む

Aベストアンサー

どこが悪いって
DateFormat.getDateInstance().parse(lstdaysgn);
が悪い。実際エラーはそこで起こってるんだし。で、そこの部分について手直しよりも一つ提案があるので聞いてみてくれたまい。

仮にrsがデータベースからSELECT文でデータを取ってきた時のレコードセットであり、かつrs.getString("sgnymd")がyyyyMMdd形式の(スラッシュが付かない)8桁の数字文字列であり、かつ単純にその日付でDate型にしたいだけなのであればこうしたらいいんじゃないか。

Date sgndate = null; // new Date()しない。もちろん後続のルーチンでnullチェックは要るようになる。
if(!StringUtil.isNull(rs.getString("sgnymd"))){
String lstdaysgn = rs.getString("sgnymd");
// ↓これもしない。
// lstdaysgn = lstdaysgn.substring(0,4) + "/" + lstdaysgn.substring(5,7) + "/" +
//                              lstdaysgn.substring(8,10);
sgndate = new SimpleDateFormat("yyyyMMdd").parse(lstdaysgn); // スラッシュつけずに8桁のyyyyMMddでそのままDateにする。
}

以上の手直しにより、このルーチンを通る際にDate 1つとString 7つ、インスタンスの生成を回避する事ができる。これがループで処理されるならなおさら。
仮に、「new SimpleDateFormat("yyyyMMdd")だとパースのたびにSimpleDateFormatのインスタンスが作られちゃうジャン!」と思うならルーチン化していいと思うけど、その場合はスレッドセーフなルーチンにしないといけないのでそこらへん注意の事。

どこが悪いって
DateFormat.getDateInstance().parse(lstdaysgn);
が悪い。実際エラーはそこで起こってるんだし。で、そこの部分について手直しよりも一つ提案があるので聞いてみてくれたまい。

仮にrsがデータベースからSELECT文でデータを取ってきた時のレコードセットであり、かつrs.getString("sgnymd")がyyyyMMdd形式の(スラッシュが付かない)8桁の数字文字列であり、かつ単純にその日付でDate型にしたいだけなのであればこうしたらいいんじゃないか。

Date sgndate = null; // new Date()しない。もちろ...続きを読む


人気Q&Aランキング

おすすめ情報