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-архив, и начнется процесс загрузки.
Вы также можете Поделиться , Посмотреть информацию , Изменить ярлык , Комментировать , Переместить , Копировать , Добавить в коллекцию прямо со страницы результатов и удалить файлы.