Mam zip, który zawiera pliki o bardzo długich nazwach.
Jeśli spróbuję wyodrębnić z wiersza polecenia, pojawia się błąd „Zbyt długa nazwa pliku”.
Jeśli użyję graficznego menedżera archiwum, nie wyodrębni on plików i nie pozwoli mi zmienić ich nazw. Ten sam problem występuje, jeśli podłączę archiwum.
Mogę wyodrębnić i zmienić nazwy plików indywidualnie, używając:
unzip -p -c example.zip "long file name.ogg" > shortname.ogg
Jest to niepraktyczne z dużą ilością plików.
Czy istnieje narzędzie, które obcina nazwy plików podczas ich wyodrębniania?
unzip -l <ARCHIVE>
i jak chcesz obcinać nazwy? Czy chcesz zachować strukturę katalogów w archiwum podczas rozpakowywania?Odpowiedzi:
Wydobywać
Możemy wykorzystać
zipinfo
jako część tego procesu, jest to program zzip
pakietu.pokaże tylko nazwy plików
example.zip
, coś wygląda jak:dzięki czemu możemy użyć tej funkcji do wyodrębnienia wszystkich plików:
long_fname=${i%.*}
: Usuwa rozszerzenie z długiej nazwy pliku, więc w przypadku gdy nazwa pliku jest mniejsza niż 256 znaków; Nie otrzymamy duplikatu rozszerzenia.${long_fname:0:250}.${i##*.}
: Tworzy nową nazwę pliku z prawidłową liczbą znaków, dodaje także.
rozszerzenie „a” pliku.Po prostu zapętlamy listę plików i wypakowujemy każdy z nich nową, prawidłową nazwą pliku, która ma 256 znaków.
Aby zmienić nazwę
Możesz użyć
zipnote
polecenia, to także częśćzip
pakietu.Najpierw wykonaj kopię zapasową pliku zip.
Uruchom to polecenie:
Otwórz nazwy za pomocą edytora, wygląda to tak:
Dodaj nowe nazwy plików w następujący sposób:
Następnie, aby zmienić nazwę plików, użyj:
Zmieniłeś ich nazwy, możesz też napisać prosty skrypt, który zrobi to automatycznie.
źródło
IFS= read -r i
jeśli nazwy plików zaczynają się od spacji lub zawierają elementy, które powłoka może interpretować jako sekwencje specjalne.