У меня на Windows 7 есть каталог, в котором есть сотни, если не тысячи подкаталогов. У некоторых из них есть файлы, у некоторых нет. Я хочу удалить все пустые каталоги.
Глядя на команду del и rmdir DOS, не похоже, что вы можете сделать это рекурсивно, не удаляя все файлы. Есть ли способ сделать это из командной строки?
windows
command-line
mohlsen
источник
источник
xcopy FROMDIR TODIR /s
. Смотрите этот SO ответ: stackoverflow.com/a/14742810Ответы:
Вы можете использовать утилиту удаления пустых каталогов .
В качестве альтернативы вы можете использовать этот однострочный пакетный файл (из DownloadSquad ):
(если используется внутри командного файла, заменить
%d
на%%d
)Это работает, потому
rd
что не удалит каталог, содержащий файлы.источник
Вы также можете использовать ROBOCOPY. Это очень просто и может также использоваться для удаления пустых папок внутри большой иерархии.
Здесь и источник и место назначения
folder1
, так как вам нужно только удалить пустые папки, а не перемещать другие файлы в другую папку./S
возможность пропустить копирование (перемещение, в указанном выше случае) пустых папок. Это также быстрее, поскольку файлы перемещаются внутри одного диска.источник
folder1
? Страшно, если не проверено хорошо./MOVE
сначала копирует файлы, а затем удаляет исходный файл после копирования. Таким образом, при/S
использовании он копирует непустые папки в место назначения (та же папка в приведенном выше случае). Затем он удаляет пустые папки (например, думает, что пустые папки уже скопированы). Нет, он не перемещает вложенные папкиfolder1
, так как ROBOCOPY рекурсивно перемещает папки.Так как Cygwin поставляется с GNU find, вы можете сделать это:
Или чтобы избежать шума, когда папка больше не существует:
источник
find . -type d -empty -delete
) не выполняется из командной строки со следующей ошибкой:FIND: Parameter format not correct
Бесплатная утилита EmptyFolderNuker делает это нормально из базовой папки на ваш выбор. Также удаляются те каталоги, которые содержат только пустые подкаталоги.
источник
"%~dp0\EmptyFolderNuker.exe" %cd%
.Если у вас установлен Cygwin , вы можете сделать это:
источник
find
(starting-directory)
-depth
-type d ...
-depth
find
Если вы работаете в emacs (что делает эту платформу независимой), работает следующее:
источник
D
если бы захотел, но, поскольку у меня нет общей потребности в этом, все, что я должен напечатать, -M-x *ded RET
и все готово. (Если бы мне действительно приходилось печатать это каждый раз, вы абсолютно правы, что это было бы абсурдно - к счастью, это не так.)M-x *ded RET
какое-либо значение или это случайно? Если последнее, как вы отслеживаете все ярлыки, которые вы назначилиemacs
? Достаточно ли запоминания или вам приходится искать их?*ded
- это сокращение от полного имени функции*-delete-empty-directories
. Многие механизмы завершения (такие как ivy, тот, который я использую) понимают этот вид нечеткого соответствия. Что касается их запоминания ... Я просто не должен. Все функции, которые я определил, начинаются с*
того, что я могу легко найти их, если они не привязаны к клавише. В противном случае, сам emacs скажет мне, есть ли более быстрый способ вызова функции. Если ничего не помогает, всегда естьapropos
.Объединение сообщений Гарета и G-Man:
Редактировать: Но это дало ошибку безопасности из-за 'C' в моей переменной PATH ... поэтому вместо этого:
Я не использую xargs, потому что кажется, что он имеет ограничение входной строки (около 1024 строк, я думаю?), Тогда как
просто продолжается до тех пор, пока у него есть вход. Оставьте подробный флаг '-v', если вы не хотите видеть результаты и / или хотите, чтобы он работал быстрее.
источник
Хм ... может быть, даже более простое решение:
for /d /r %d in (*.*) do rd "%d"
Запустите это из папки, в которую вы хотите удалить пустые папки.
/ d - будет работать с папками, а не с файлами / r - будет возвращать подкаталоги
источник