Powiedz, że mam katalog o nazwie foo/
. Ten folder zawiera podkatalogi. Jak mogę usunąć wszystkie puste katalogi za pomocą jednego polecenia?
command-line
delete
directory
justingrif
źródło
źródło
rm -rf <directory-name>
. Spowoduje to usunięcie katalogu wraz z całą jego zawartością, w tym plikami i podkatalogami. Ta-r
opcja oznacza rekurencyjne usuwanie, a-f
polecenie oznacza, że nie pytaj przed usunięciem. Jeśli chcesz otrzymać monit przed usunięciem katalogu / pliku, zamień-f
opcję na-i
opcję.stdout
jedną komendę (np.find
) Dostdin
drugiej (np.rm
), Jednak należy zachować ostrożność, ponieważ może to wymazać lub usunąć pliki / katalogi, których nie chcesz usunąć! Aby uzyskać dodatkowe informacje, jak to zrobić, zobaczman
strony dla każdego z tych poleceń. Aby być bezpiecznym, zawsze testuj takie rzeczy w katalogu tymczasowym przed wypróbowaniem prawdziwych rzeczy.Możesz skorzystać z
rmdir
odmowy polecenia usunięcia niepustych katalogów orazfind -depth
opcji przejścia od dołu do góry drzewa katalogów:(i zignoruj błędy) lub dołącz,
2>/dev/null
aby naprawdę je zignorować.-depth
Możliwośćfind
startów znalezienie u dołu drzewa katalogów.rm -rf
usunie wszystkie pliki w katalogu (i jego podkatalogach i ....) ORAZ wszystkie katalogi i wszystko.źródło
Usunie wszystkie puste katalogi. Zgłasza błąd dla każdego niepustego katalogu i pliku, aby zatrzymać te błędy zaśmiecające terminal, użyj
źródło
rmdir * 2>/dev/null || true
. (Sposób na znalezienie (1) jest lepszy do pisania skryptów, ale z innego powodu: ponieważ lepiej wyraża to, co chcesz zrobić.)$HOME
. Ze złym uśmiechem.Bo jeśli chcesz tylko usunąć bezpośrednie podkatalogi z
foo/
.źródło
Podejście do Pythona
Działa to tak:
os.walk()
funkcji do rekurencyjnego chodzenia po drzewie katalogów. Na każdej iteracjir
ustawiony jest bieżący folder, do którego uzyskujemy dostęp,s
zawiera listę katalogów wewnątrzr
if
będzie zawierać listę plików w tym folderze. Oczywiście, jeślif
is
są puste, wiemy, żer
jest puste.empty
listę wszystkich katalogów, które są puste, na podstawie oceny podanej powyżej.map()
służy do wykonywaniaos.rmdir()
każdej pozycji naempty
liście. Zrozumienie listy może być wykorzystane jako alternatywa.Jako skrypt byłby to tak:
źródło
/bin/sh
tylko, a Python jest w rzeczywistości bardziej eleganckim językiem niż te dwa