Czy istnieje szybki sposób na usunięcie pliku z Jar / war bez konieczności wyodrębniania słoika i ponownego tworzenia go?


105

Więc muszę usunąć plik z pliku jar / war. Miałem nadzieję, że pojawiło się coś takiego jak „jar -d myjar.jar file_I_donot_need.txt”

Ale w tej chwili jedynym sposobem, w jaki mogę to zrobić z mojego wiersza poleceń Linuksa (bez używania WinRAR / Winzip lub odpowiednika Linuksa), jest

  • Wykonaj „jar -xvf” i wyodrębnij
    cały plik JAR
  • Usuń pliki, których nie potrzebuję
  • Odtwórz plik jar za pomocą polecenia „jar -cvf”

Proszę, powiedz mi, że istnieje krótsza droga?


3
Ponieważ „jar” to tylko plik zip, podejrzewam, że będziesz miał więcej szczęścia na superuser.com .
Kirk Woll,

Możesz także spróbować napisać skrypt powłoki, aby opakować cały proces. Coś jak./myscript.sh -d <list of files>
Favonius

Odpowiedzi:


202
zip -d file.jar unwanted_file.txt

jar to w końcu tylko plik zip. Zdecydowanie dużo szybciej niż dekompresja / rekompresja.


3
Częściej zamiast niego mam zainstalowany p7zip zipiw tym przypadku ważne jest określenie formatu pliku:7z d -tzip file.jar dir/unwanted_file.txt
lapo

@martona Otrzymuję następujący błąd: błąd zip: struktura pliku Zip
Goaler444

@ Goaler444 Miałem ten sam błąd, ale użycie 7z zgodnie z sugestią lapo zadziałało dla mnie.
yby

Jak usunąć plik z słoika podrzędnego lub słoika wielkiego dziecka?
Tom

5
Jeśli chcesz usunąć folder ze słoika, upewnij się, że na niechcianym folderze znajduje się końcowy ukośnik:zip -d file.jar unwanted_folder/
Martin Woolstenhulme

1

W Javie możesz skopiować wszystkie wpisy z jar z wyjątkiem tego, który chcesz usunąć. tzn. musisz wykonać kopię, ale nie musisz tworzyć pojedynczych plików.

Możesz to zrobić przez

  • tworzenie nowego słoika.
  • iterowanie przez Jar, który masz
  • skopiuj wpis z jednego pliku do drugiego, pomijając dowolne pliki.
  • zamknij i włóż oryginalny słoik, jeśli chcesz.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.