zipアーカイブで長い名前のファイルの名前を変更/抽出する方法


11

非常に長い名前のファイルを含むzipがあります。

コマンドラインで抽出しようとすると、「ファイル名が長すぎます」というエラーが表示されます。
グラフィカルアーカイブマネージャーを使用すると、ファイルが抽出されず、ファイル名を変更できません。アーカイブをマウントしても同じ問題が発生します。

私は個別にファイルを抽出して名前を変更できます:

unzip -p -c example.zip "long file name.ogg" > shortname.ogg

これは多くのファイルでは非現実的です。

ファイル名が抽出されるときにファイル名を切り捨てるツールはありますか?


の出力は何unzip -l <ARCHIVE>ですか?名前をどのように切り捨てますか?抽出中にアーカイブ内のディレクトリ構造を保持しますか?
デビッドFoerster

回答:


13

抽出するには

zipinfoこのプロセスの一部として使用できzipます。パッケージからのプログラムです。

zipinfo -2 example.zip

では、ファイル名のみが表示されますexample.zip。次のようになります。

file1-long-name-...-bla-bla.html
file2-long-name-...-bla-bla.html

この機能を使用してすべてのファイルを抽出できます。

zipinfo -2 example.zip | while read i;
do
  long_fname=${i%.*}
  unzip -p -c example.zip "$i" > "${long_fname:0:250}.${i##*.}"
done;
  • long_fname=${i%.*}:長いファイル名から拡張子を削除するため、ファイル名が256文字未満の場合。拡張子が重複することはありません。
  • ${long_fname:0:250}.${i##*.}:正当な文字数で新しいファイル名を作成し、.ファイルの実際の拡張子も追加します。

単純にファイルリストにループして、それぞれを256文字の新しい正当なファイル名で抽出します。


名前を変更するには

zipnoteコマンドを使用できますzip。これもパッケージの一部です。

まず、zipファイルのバックアップを取得します。

次のコマンドを実行します。

zipnote example.zip > names

エディターを使用して名前を開くと、次のようになります。

@ file name long in zip and a lot of other strings in the file name
@ (comment above this line)
@ (zip file comment below this line)

次のような新しいファイル名を追加します。

@ file name long in zip and a lot of other strings in the file name
@=new short name for above file
@ (comment above this line)
@ (zip file comment below this line)

次に、ファイル名を変更するには:

zipnote -w example.zip < names

すべての名前を変更しました。これを自動的に行う簡単なスクリプトを書くこともできます。


それらは非常に便利です、ありがとう!zipnoteの例を機能させることができませんでした。最初の例ではファイル拡張子が削除されていますが、これで十分です。ありがとう!
テレンスエデン

私は答えを更新しましたが、拡張機能も保持されます;)
Ravexina

IFS= read -r iファイル名が空白で始まる場合、またはシェルがエスケープシーケンスとして解釈する可能性があるものを含む場合に使用してください。
デビッドFoerster
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.