Jak mogę skompresować podkatalogi do osobnych archiwów?
Przykład:
directory
subdir1
subdir2
Powinien utworzyć podkatalog1 (.tar) .gz i podkatalog2 (.tar) .gz
Ten mały skrypt wydaje się najlepszą opcją, biorąc pod uwagę twoje wymagania:
cd directory
for dir in */
do
base=$(basename "$dir")
tar -czf "${base}.tar.gz" "$dir"
done
Prawidłowo obsługuje katalogi ze spacjami w ich nazwach.
Co powiesz na to:
find * -maxdepth 0 -type d -exec tar czvf {}.tar.gz {} \;
Objaśnienie: Uruchomisz wyszukiwanie na wszystkich elementach w bieżącym katalogu. Maxdepth 0 sprawia, że nie będzie się powtarzać niżej niż podane argumenty. (W tym przypadku * lub wszystkie elementy w bieżącym katalogu) Argument „d” dla „-type” pasuje tylko do katalogów. Następnie exec uruchamia tar na dowolnych dopasowaniach. ({} zastępuje się pasującym plikiem)
źródło
for dir in `find * -maxdepth 0 -type d`; do tar -cvzf ${dir}.tar.gz ${dir}; done
Spowoduje to utworzenie pliku o nazwie blah.tar.gz dla każdego pliku w katalogu o nazwie blah.
Jeśli masz w katalogu więcej niż tylko katalogi (tzn. Także pliki, ponieważ ls zwróci wszystko w katalogu), użyj tego:
Grep -v wyklucza bieżący katalog, który
find
domyślnie pojawi się w poleceniu.źródło
for dir in *