Mam katalog na moim komputerze z systemem Windows 7, który zawiera setki, jeśli nie tysiące podkatalogów. Niektóre z nich mają pliki, inne nie. Chcę usunąć wszystkie puste katalogi.
Patrząc na komendę del and rmdir DOS, nie wygląda na to, że można to zrobić rekurencyjnie bez usuwania wszystkich plików. Czy można to zrobić z wiersza polecenia?
windows
command-line
mohlsen
źródło
źródło
xcopy FROMDIR TODIR /s
. Zobacz tę odpowiedź SO: stackoverflow.com/a/14742810Odpowiedzi:
Możesz użyć narzędzia Usuń puste katalogi .
Alternatywnie możesz użyć tego pliku wsadowego z jedną linią (z DownloadSquad ):
(jeśli jest stosowany w środku plik wsadowy wymienić
%d
z%%d
)Działa to, ponieważ
rd
nie usunie katalogu zawierającego pliki.źródło
Możesz także użyć ROBOCOPY. Jest to bardzo proste i może być również użyte do usunięcia pustych folderów w dużej hierarchii.
Tutaj znajdują się zarówno źródło, jak i miejsce docelowe
folder1
, ponieważ wystarczy usunąć puste foldery zamiast przenosić inne pliki do innego folderu./S
opcja polega na pominięciu kopiowania (przenoszenia, w powyższym przypadku) pustych folderów. Jest także szybszy, ponieważ pliki są przenoszone na ten sam dysk.źródło
folder1
? Przerażające, chyba że dobrze przetestowane./MOVE
najpierw kopiuje pliki, a następnie usuwa plik źródłowy po skopiowaniu. Tak, jak/S
jest używany, kopiuje niepuste foldery do miejsca docelowego (ten sam folder w powyższym przypadku). Następnie usuwa puste foldery (na przykład myśląc, że puste foldery zostały już skopiowane). Nie, nie przenosi zagnieżdżonych folderówfolder1
, ponieważ ROBOCOPY przenosi foldery rekurencyjnie.Ponieważ Cygwin zawiera GNU find, możesz to zrobić:
Lub, aby uniknąć hałasu, gdy folder już nie istnieje:
źródło
find . -type d -empty -delete
) kończy się niepowodzeniem z wiersza polecenia z następującym błędem:FIND: Parameter format not correct
Bezpłatne narzędzie EmptyFolderNuker robi to dobrze, z wybranego folderu podstawowego. Usuwa również te katalogi zawierające tylko puste podkatalogi.
źródło
"%~dp0\EmptyFolderNuker.exe" %cd%
.Jeśli masz zainstalowany Cygwin , możesz to zrobić:
źródło
find
(starting-directory)
-depth
-type d ...
-depth
find
Jeśli pracujesz w emacsie (czyniąc to niezależnym od platformy), działają:
źródło
D
gdybym chciał, ale ponieważ nie mam wspólnej potrzeby, wszystko, co muszęM-x *ded RET
napisać, to i bam-made. (Gdybym rzeczywiście musiał to pisać za każdym razem, masz absolutną rację, że byłoby to absurdalne - na szczęście tak nie jest.)M-x *ded RET
ma to jakieś znaczenie, czy jest losowe? Jeśli to drugie, w jaki sposób śledzisz wszystkie przypisane skrótyemacs
? Czy zapamiętywanie wystarcza, czy musisz je sprawdzić?*ded
to skrót od pełnej nazwy funkcji*-delete-empty-directories
. Wiele silników uzupełniających (takich jak bluszcz, z których korzystam) rozumie tego rodzaju rozmyte dopasowanie. Jeśli chodzi o zachowanie ich w pamięci… po prostu nie muszę. Wszystkie zdefiniowane przeze mnie funkcje zaczynają się od,*
więc mogę je łatwo znaleźć, jeśli nie są powiązane z kluczem. W przeciwnym razie sam emacs powie mi, czy istnieje szybszy sposób wywołania tej funkcji. Jeśli wszystko inne zawiedzie, zawsze będzieapropos
.Łączenie postów Garetha i G-Mana:
Edycja: Ale to spowodowało błąd bezpieczeństwa z powodu „C” w mojej zmiennej PATH var ... więc zamiast tego:
Nie używam xargs, ponieważ wydaje się, że ma limit linii wejściowej (około 1024 linii, jak sądzę?), Podczas gdy
po prostu działa tak długo, jak długo ma wkład. Pomiń szczegółową flagę „-v”, jeśli nie chcesz widzieć wyników i / lub chcesz, aby działało szybciej.
źródło
Hmmm ... może nawet prostsze rozwiązanie:
for /d /r %d in (*.*) do rd "%d"
Rozpocznij od folderu, w którym chcesz usunąć puste foldery.
/ d - będzie działał na folderach, a nie na plikach / r - będzie rekursował podkatalogi
źródło