Как удалить все пустые каталоги в каталоге из командной строки?
Скажем, у меня есть каталог с именем foo/
, Эта папка содержит подкаталоги. Как я могу удалить все пустые каталоги в одной команде?
5 ответов
Попробуйте эту команду:
find . -empty -type d -delete
find
Команда используется для поиска файлов / каталогов, соответствующих определенным критериям поиска по указанному пути, в данном случае текущего каталога (отсюда .
).
-empty
опция верна для любого файла и директории, которые пусты.
-type d
опция сохраняется для указанного типа файла; в этом случае d
обозначает каталог типа файла.
-delete
Параметр - это действие, которое нужно выполнить, и оно действует для всех файлов, найденных в поиске.
Вы можете воспользоваться rmdir
отказ команды удалить непустые каталоги, и find -depth
опция для обхода дерева каталогов снизу вверх:
find . -depth -exec rmdir {} \;
(и игнорировать ошибки), или добавить 2>/dev/null
чтобы действительно игнорировать их.
-depth
возможность find
начинает поиск в нижней части дерева каталогов.
rm -rf
удалит все файлы в каталоге (и его подкаталогах, и....) и все каталоги и все.
rmdir *
Удалит все пустые каталоги. Он выдаст ошибку для каждого непустого каталога и файла, чтобы эти ошибки не загромождали ваш терминал, используйте
rmdir * 2> /dev/null
find . -type d -empty -delete -maxdepth 1
Если вы хотите удалить только прямые подкаталоги foo/
,
Подход Python
$ tree
.
├── empty_dir1
├── empty_dir2
├── subdir1
│ ├── file1.abc
│ └── file2.abc
└── subdir2
├── file1.abc
└── file2.abc
4 directories, 4 files
$ python -c 'import os;empty=[r for r,s,f in os.walk(".") if not f and not s and r != "." ];map(lambda x: os.rmdir(x),empty)'
$ tree
.
├── subdir1
│ ├── file1.abc
│ └── file2.abc
└── subdir2
├── file1.abc
└── file2.abc
Это работает так:
- мы используем
os.walk()
функция для рекурсивного обхода дерева каталогов. На каждой итерацииr
установлен на текущую папку, к которой мы обращаемся,s
содержит список каталогов вr
, а такжеf
будет содержать список файлов в этой папке. Конечно, еслиf
а такжеs
пусты, мы знаем, чтоr
пустой. - Первый список-понимание позволяет нам создавать
empty
список всех пустых каталогов, основанный на оценке, указанной выше. - вторая функция,
map()
используется для выполненияos.rmdir()
на каждом предмете вempty
список. Понимание списка может быть использовано как альтернатива.
Как сценарий это будет так:
#!/usr/bin/env python
import os
empty=[]
for r,s,f in os.walk("."):
if not f and not s and r != ".":
empty.append(r)
for i in empty:
os.rmdir(i)