Korzystanie z findtego powinno działać:
find /dir -not -name "dir" -maxdepth 1 -type d -exec zip -r '{}.zip' '{}' \;
Zauważ, że mam /dirjako główną findścieżkę, ale mam też -not -name "dir", że katalog nadrzędny nie jest archiwizowany. Następnie ograniczamy głębokość findskanu, za -maxdepth 1pomocą którego środki findbędą szukać tylko bezpośrednich potomków ścieżki /dir. Następnie upewniamy się, że działamy tylko na katalogach z -type d. Na koniec używamy -execmagicznego zippolecenia, które rekurencyjnie kompresuje wszystkie znalezione katalogi; {}po prostu odpowiada samej nazwie katalogu.
Innym taktem byłoby użycie -mindepth 1zamiast -not -name "dir"na wypadek, gdyby zagnieżdżony katalog w /dirstrukturze nadrzędnej w jakiś sposób również nosił nazwę /dirlub ma „dir” jako część swojej nazwy:
find /dir -mindepth 1 -maxdepth 1 -type d -execdir echo {} \;
Teraz utworzyliby archiwa ZIP, które rozwiną się do pełnej /dirścieżki; /dir/EqcWTG, /dir/SomeDirectoryName, /dir/3435346, Itp ... Jeśli chciałeś autonomiczny / względnych archiwów ZIP można użyć -execdirzamiast -exectak:
find /dir -not -name "dir" -maxdepth 1 -type d -execdir zip -r '{}.zip' '{}' \;
Sam -execdirpomysł, ale -mindepth 1zamiast -not -name "dir":
find /dir -mindepth 1 -maxdepth 1 -type d -execdir zip -r '{}.zip' '{}' \;
Ponieważ -execdirwymusza findpolecenie, aby działać w rzeczywistym katalogu on znalazł coś-zamiast pełnej ścieżki-tego polecenia spowodowałoby podobnie nazwanych archiwów ZIP, które rozszerzają się do względnych katalogach nazwanych EqcWTG, SomeDirectoryName, 3435346, etc ... Ale znowu, końcowe wykorzystanie / opcje wybierz wszystko zależy od twoich ostatecznych potrzeb archiwizacji ZIP.
/dirza pomocą-mindepth 1, na wypadek gdyby jeden z podkatalogów miał taką samą nazwę jak rodzic.