Korzystanie z find
tego powinno działać:
find /dir -not -name "dir" -maxdepth 1 -type d -exec zip -r '{}.zip' '{}' \;
Zauważ, że mam /dir
jako główną find
ścieżkę, ale mam też -not -name "dir"
, że katalog nadrzędny nie jest archiwizowany. Następnie ograniczamy głębokość find
skanu, za -maxdepth 1
pomocą którego środki find
bę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 -exec
magicznego zip
polecenia, które rekurencyjnie kompresuje wszystkie znalezione katalogi; {}
po prostu odpowiada samej nazwie katalogu.
Innym taktem byłoby użycie -mindepth 1
zamiast -not -name "dir"
na wypadek, gdyby zagnieżdżony katalog w /dir
strukturze nadrzędnej w jakiś sposób również nosił nazwę /dir
lub 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ć -execdir
zamiast -exec
tak:
find /dir -not -name "dir" -maxdepth 1 -type d -execdir zip -r '{}.zip' '{}' \;
Sam -execdir
pomysł, ale -mindepth 1
zamiast -not -name "dir"
:
find /dir -mindepth 1 -maxdepth 1 -type d -execdir zip -r '{}.zip' '{}' \;
Ponieważ -execdir
wymusza find
polecenie, 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.
/dir
za pomocą-mindepth 1
, na wypadek gdyby jeden z podkatalogów miał taką samą nazwę jak rodzic.-mindepth 1
jako kolejny potencjalny sposób uniknięcia spakowania katalogu nadrzędnego.$ find * -maxdepth 1 -type d -exec zip -r {}.zip {} \;
osiąga dokładnie to, czego chciałem, użyłem go w katalogach testowych, a także w moim na żywo, dla którego pierwotnie opublikowałem to pytanie.