web-dev-qa-db-ja.com

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

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

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

次を使用して、ファイルを個別に抽出して名前を変更できます。

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

これは、多くのファイルでは実用的ではありません。

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

8
Terence Eden

抽出する

このプロセスの一部として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

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

11
Ravexina