非常に長い名前のファイルを含むZipがあります。
コマンドラインで抽出しようとすると、「ファイル名が長すぎます」というエラーが表示されます。
グラフィカルアーカイブマネージャーを使用すると、ファイルは抽出されず、ファイル名を変更できません。アーカイブをマウントすると、同じ問題が発生します。
次を使用して、ファイルを個別に抽出して名前を変更できます。
unzip -p -c example.Zip "long file name.ogg" > shortname.ogg
これは、多くのファイルでは実用的ではありません。
ファイル名が抽出されるときにファイル名を切り捨てるツールはありますか?
このプロセスの一部として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
すべての名前を変更しました。また、これを自動的に行う簡単なスクリプトを作成することもできます。