2012-06-28 11 views
9
zip -r 1.zip /home/username/the_folder 

w tutaj, kiedy rozpakować 1.zip, stworzy /home/username/the_folder, w zależności od folderu jestem z rozpakowaniu.pocztowy podając ścieżki bezwzględne, ale tylko część z nich zachowując

Jak skompresować, podając pełne bezwzględne ścieżki, ale sprawić, że zip będzie zawierał tylko strukturę folderów rozpoczynającą się od, w tym przypadku na przykład, /home/username?

W ten sposób mogłem być na dowolnej ścieżce, którą chciałem, rozpakować i utworzyć tylko the_folder, a nie /home/username/the_folder.

Odpowiedz

9

użyj polecenia:

cd path_under_folder_to_zip && \ 
zip -r 1.zip folder_to_zip >/dev/null && \ 
mv 1.zip my_current_path 
+0

cd path_under_folder_to_zip && zip -r my_current_path/1.zip folder_to_zip>/dev/null –

+0

Działa świetnie na MacOS :) Dzięki. –

5

Użyj ścieżki względnej podczas określania pliku do zip.

cd /home/username 
zip -r 1.zip ./the_folder 

Następnie, po rozpakowaniu, będzie to względna ścieżka rozpoczynająca się od dowolnego folderu, w którym się rozpakowuje.

+0

Chce, aby móc użyć ścieżki bezwzględnej. Zwróć uwagę na "dowolną ścieżkę, którą chciałem". Chociaż to, co mówisz, ma sens. –

1
  1. przedmiot

Jak o tym:

function zipExtraFolder { 
    if [ $# -lt 2 ]; then 
     echo "provide at least two arguments" 
     return 
    fi 
    folder=$2 
    mkdir del 
    echo cp -r `dirname $folder` del 
    cd del 
    echo zip -r ../$1 . 
    cd - 
    rm -rf del 
} 

Definiowanie powyżej jako funkcję powłoki w .bashrc i powinieneś być w stanie z niego korzystać, kiedy tylko chcesz. Użycie będzie jak poniżej.

zipExtraFolder 1.zip /home/username/the_folder 
+0

Nie mogę naprawdę odczytać tego kodu i czy nie spowoduje to problemów, gdy zacznę tworzyć bardziej złożone polecenia zip? –

-1

Wystarczy użyć opcji -j, działa na OSX, nie wiem o linux.

zip -j -r 1.zip /home/username/the_folder

+0

Wystąpił błąd, prawdopodobnie dlatego, że istnieją dwa wystąpienia pliku o tej samej nazwie w tym folderze. Mimo że znajdują się w różnych podfolderach. –

+6

Zapomniałem, opcja '-j' nie jest praktyczna, gdy używa się opcji' -r', ponieważ kompresuje wszystkie pliki w folderze głównym bez struktury folderów. – jackjr300

+0

jeśli '-j' nie działa dla ciebie checkout [ta odpowiedź] (http://superuser.com/a/119661/45285) – czerasz

Powiązane problemy