Python поиск папок без файлов на диске
В-нулевых, никогда не используйте конструкции вида from os import *, from os.path import *! Никогда! Вы засоряете пространство глобальных символов множеством имён которых не знаете и которые рано или поздно пересекутся с именами ваших переменных и функций. Совершенно безобидный код вдруг поменяет своё поведение и вам будут гарантированы часы отладки со словами «я же тут написал как надо, почему оно не вызывается?»
Во-первых, никаких собираний результатов в список. Обход каталогов длительная операция, выдавать данные наверх нужно как только они стали доступны. Так что нужно делать генератор, который будет выдавать наверх каталог и флажок (не)пустой. Генератор пока будет рекурсивный — так проще. Если при обработке каталога встретился не каталог, то текущий каталог будет отправлен как не пустой. То же самое будет если нашёлся не пустой подкаталог.
Во-вторых, обработку ошибок надо локализовать.
try большие куски кода вы потеряете часть информации. Например, при обработке каталога в середине проверка подкаталога ошиблась. Тогда весь хвост каталога не будет обработан.Рекурсивная программа:
import os
import sys
def listdir(path):
try:
yield from os.listdir(path)
except PermissionError:
print(f'find-empty-dirs: ‘{path}’: Permission denied', file=sys.stderr)
def isdir(path):
try:
return os.path.isdir(path)
except PermissionError:
print(f'find-empty-dirs: ‘{path}’: Permission denied', file=sys.stderr)
return False
def dirs(path):
empty = True
for name in listdir(path):
entry = os.path.join(path, name)
if isdir(entry):
for e, p in dirs(entry):
if e:
yield e, p
else:
empty = False
else:
empty = False
yield empty, path
def empty_dirs(path):
for e, p in dirs(path):
if e:
yield p
def main():
for path in sys.
argv[1:]:
for d in empty_dirs(path):
print(d)
main()
Нерекурсивная версия рекурсивного генератор потребует явного стека, который хранит тройки [путь, (не)пусто, итератор]. Итератор двигается по каталогу с помощью вызова next(итератор, None). Признаки не пустоты обновляются при движении по каталогам и передаются наверх когда каталог кончился. Из рекурсивной программы нужно убрать функции dirs, empty_dirs и добавить эту:
def empty_dirs(root):
stack = [[root, True, listdir(root)]]
while stack:
path, empty, it = stack[-1]
name = next(it, None)
if name is None:
stack.pop()
if empty:
yield path
else:
if stack:
stack[-1][1] = False
else:
entry = os.path.join(path, name)
if isdir(entry):
stack.append([entry, True, listdir(entry)])
else:
stack[-1][1] = False
Подумай Для чего нужен поиск файлов и папок на компьютере? Как найти фрагмент текста в
malika26370 malika26370
- Информатика
- студенческий
ответ дан • проверенный экспертом
vimmortal2 vimmortal2
Ответ:
Поиск файлов и папок на компьютере необходим для более быстрого поиска необходимой информации. Ведь действительно, можно потратить десятки минут в поисках папки вручную, но можно и осуществить поиск по названию/содержимому/дате изменения и т.п., тем самим сэкономив время и силы.
Для поиска фрагмента текста в текстовом редакторе также можно использовать функцию нахождения содержимого. Это можно сделать несколькими способами:
- Включить поиск с помощью сочетания клавиш Ctrl + F.
- Зайти в меню «Правка» => «Найти» / «Найти далее» / «Найти ранее».
Данные процедуры откроют подобное меню, в котором можно осуществить поиск определённого набора символов по указанным параметрам.
Основное сходство в поиске файла или папки на компьютере и фрагмента текста в редакторе заключается в том, что ищется необходимый набор символов по заданным параметрам. Основные отличия таковы: в зависимости от объема поиска, он может
Некоторые текстовые редакторы позволяют искать некоторые текстовые значения, не заходя в сам документ (например, NotePad++). Эта функция объединяет поиск папок, файлов с поиском фрагментов текста в редакторе.
спасибо
большое
спасибо
вы мне помогли
Новые вопросы в Информатика
Срочно помогите с С++ как это сделать желательно с скриншотом.
У наведеному коді перевантажте оператор “/” для ділення двох об’єктів
класу coord:
clas
…
s coord {
int x,y;
public:
coord() { x = 0; y= 0; }
coord(int i, int j) { x = i; y = j; }
void get_xy(int &i, int &j) { i = x; j = y; }
// .
.. оголошення оператора-функції
};
//… визначення оператора-функції
void main() { //… оголошення об’єктів
// … ділення об’єктів — виклик оператора-функції
}
отдам все свой юалы за выполненую работу
помогите сделать. пюпжпжжпжпжпжпжпжпжжп
Срочно, помогите пожалуйста написать код на языке с ++ даю 30 б 1)Задано массив действительных чисел размерности 11. Вычислить процент положительных, … отрицательных и нулевых элементов в массиве.
С какого статуса доступно отметить ответ как лучший?
Предыдущий
Следующий
Поиск файлов в Linux с помощью командной строки | Linode
Когда вам нужно найти файл в Linux, иногда это не так просто, как найти файл в другой операционной системе. Это особенно верно, если вы используете Linux без графического пользовательского интерфейса и должны полагаться на командную строку. В этой статье рассматриваются основы того, как найти файл в Linux с помощью CLI.
find в Linux используется для поиска файла (или файлов) путем рекурсивной фильтрации объектов в файловой системе на основе простого условного механизма. Вы можете использовать 9Команда 0003 find для поиска файла или каталога в вашей файловой системе. Используя флаг -exec ( find -exec ), совпадения, которые могут быть файлами, каталогами, символическими ссылками, системными устройствами и т. д., могут быть найдены и немедленно найдены.
обрабатывается одной и той же командой.Поиск файла в Linux по имени или расширению
Используйте find из командной строки, чтобы найти определенный файл по имени или расширению.
В следующем примере выполняется поиск файлов *.err в /home/username/ каталог и все подкаталоги:
find /home/username/ -name "*.err"
Использование общих команд
find и синтаксиса для поиска файла в Linux - Атрибут
optionsбудет управлять поведением и методом оптимизации процессаfind.
- Атрибут
start/pathопределяет каталог верхнего уровня, гдеfindначинает фильтрацию. - Атрибут
выражениеуправляет тестами, которые выполняют поиск в иерархии каталогов для получения выходных данных.
Рассмотрим следующий пример команды:
find -O3 -L /var/www/ -name "*.html"
Эта команда включает максимальный уровень оптимизации (-O3) и позволяет find следовать символическим ссылкам ( -L ). find ищет во всем дереве каталогов ниже /var/www/ файлы, оканчивающиеся на .html .
Основные примеры
| Команда | Описание |
|---|---|
найти . -name testfile.txt | Найти файл с именем testfile.txt в текущем и подкаталогах. |
find /home -name *.jpg | Найти все файлы .jpg в каталоге /home и его подкаталогах.![]() |
найти . -тип f -пустой | Найти пустой файл в текущем каталоге. |
find /home -user exampleuser -mtime -7 -iname ".db" | Найти все .db файлов (без учета регистра), измененных за последние 7 дней пользователем с именем exampleuser. |
Параметры и оптимизация для
find Конфигурация по умолчанию для find игнорирует символические ссылки (файлы ярлыков). Если вы хотите, чтобы находил , чтобы переходить и возвращать символические ссылки, вы можете добавить -L опция команды, как показано в примере выше.
find оптимизирует свою стратегию фильтрации для повышения производительности. Три выбираемых пользователем уровня оптимизации указаны как -O1 , -O2 и -O3 . Оптимизация -O1 используется по умолчанию и заставляет найти для фильтрации на основе имени файла перед запуском всех остальных тестов.
Оптимизация на уровне -O2 отдает приоритет фильтрам имен файлов, как в -O1 , а затем запускает фильтрацию всех типов файлов, прежде чем переходить к другим более ресурсоемким условиям. Оптимизация уровня -O3 позволяет найти для выполнения наиболее серьезной оптимизации и переупорядочить все тесты в зависимости от их относительной стоимости и вероятности их успеха.
| Команда | Описание |
|---|---|
-O1 | (по умолчанию) фильтрация сначала по имени файла. |
-O2 | Сначала имя файла, затем тип файла. |
-O3 | Разрешить find автоматически изменять порядок поиска на основе эффективного использования ресурсов и вероятности успеха. |
-maxdepth X | Поиск в текущем каталоге, а также во всех подкаталогах X уровней глубины.![]() |
-iname | Поиск без учета регистра. |
-not | Возвращает только результаты, не соответствующие тестовому набору. |
-type f | Поиск файлов. |
-type d | Поиск каталогов. |
Поиск файла в Linux по времени модификации
Команда find содержит возможность фильтрации иерархии каталогов на основе времени последнего изменения файла:
find / -name "*conf" -mtime - 7 найти /home/exampleuser/ -name "*conf" -mtime -3
Первая команда возвращает список всех файлов во всей файловой системе, которые заканчиваются символами conf и были изменены за последние семь дней. Вторая команда фильтрует домашний каталог пользователя exampleuser на наличие файлов, имена которых заканчиваются на символы conf и которые были изменены за предыдущие три дня.
Используйте
grep для поиска файла в Linux на основе содержимого Команда find может фильтровать иерархию каталогов только на основе имени файла и метаданных. Если вам нужно выполнить поиск по содержимому файла, используйте такой инструмент, как группа . Рассмотрим следующий пример:
найти . -type f -exec grep "example" '{}' \; -Распечатать
Это ищет каждый объект в текущей иерархии каталогов ( . ), который является файлом ( -type f ), а затем запускает команду grep "example" для каждого файла, который удовлетворяет условиям. Соответствующие файлы печатаются на экране ( -print ). Фигурные скобки ( {} ) являются заполнителем для результатов поиска . {} заключены в одинарные кавычки ( ' ), чтобы избежать передачи grep искаженного имени файла. Команда -exec завершается точкой с запятой ( ; ), которую следует экранировать ( \; ), чтобы избежать интерпретации оболочкой.
Как найти и обработать файл в Linux
Параметр -exec запускает команды для каждого объекта, который соответствует выражению поиска. Рассмотрим следующий пример:
найти . -name "rc.conf" -exec chmod o+r '{}' \;
Это фильтрует каждый объект в текущей иерархии ( . ) для файлов с именем rc.conf и запускает команду chmod o+r для изменения прав доступа к файлу результатов find .
Команды, выполняемые с помощью -exec , выполняются в корневом каталоге процесса find . Используйте -execdir для выполнения указанной команды в каталоге, где находится совпадение. Это может уменьшить проблемы с безопасностью и обеспечить более желательную производительность для некоторых операций.
Параметры -exec или -execdir запускаются без дополнительных запросов. Если вы предпочитаете получать запрос перед выполнением действия, замените -exec на -ok или -execdir на -okdir .
Как найти и удалить файл в Linux
ОсторожноБудьте очень осторожны, используя это.
Чтобы удалить файлы, соответствующие вашему запросу, вы можете добавить -delete в конце выражения. Делайте это только в том случае, если вы уверены, что результаты будут соответствовать только тем файлам, которые вы хотите удалить.
В следующем примере find находит все файлы в иерархии, начиная с текущего каталога и полностью возвращаясь в дерево каталогов. В этом примере find удалит все файлы, оканчивающиеся на символы .err :
find . -name "*.bak" -delete
Вы можете обратиться к следующим ресурсам для получения дополнительной информации по теме. Хотя они предоставляются в надежде, что они будут полезно, обратите внимание, что мы не можем ручаться за точность или своевременность материалы внешнего размещения.
- Страница руководства Ubuntu при поиске
- Страница GNU при поиске
Поиск файлов и папок
Инструмент поиска Filecamp позволяет быстро искать огромное количество файлов и папок.

Поиск файлов и папок
Щелкните значок Поиск , расположенный на панели инструментов .
В окне поиска вы можете ввести все, что связано с сохраненными файлами. Нажмите Поиск , чтобы выполнить поиск.
Обычный поиск будет глобальным поиском; все в файлах, которые связаны с тем, что было найдено, будет отображаться. Это могут быть имена файлов, описания, теги, ключевые слова, имена папок и т. д.
Параметры расширенного поиска позволяют пользователям искать активы, вводя значения для определенных атрибутов:
- Поиск только в папке поиск элементов, содержащихся в вашей текущей папке и ниже.
- Найти только активы с истекшим сроком действия — сузить поиск только до товаров с истекшим сроком годности.
- Найдите файлы с меткой — сузьте область поиска только до определенных меток.
- Ограничить поиск по измененной дате — сузить поиск до определенного периода времени.

Нажмите Поиск , чтобы выполнить поиск.
Страница результатов поиска
На странице результатов поиска отображается список всех найденных элементов.
Вы можете нажать на переключатель просмотра значок для переключения между просмотром галереи и просмотром списка.
Чтобы перейти к определенной записи поиска, просто дважды щелкните элемент в результатах поиска, и вы увидите файл в увеличенном предварительном просмотре.
Загрузка из результатов поиска и другие действия
Из списка результатов поиска вы можете загрузить файл, щелкнув Меню с тремя точками и выбрав Загрузить .
Если вы хотите загрузить несколько элементов, вы можете выбрать все файлы и папки, которые хотите загрузить, и выбрать Загрузите в Панель массовых действий . Теперь будет создан ZIP-архив, и начнется процесс загрузки.
Вы также можете Поделиться , Посмотреть информацию , Изменить ярлык , Комментировать , Переместить , Копировать , Добавить в коллекцию прямо со страницы результатов и удалить файлы.


argv[1:]:
for d in empty_dirs(path):
print(d)
main()



