Как найти файлы по списку имен

0 / 0 / 0

Регистрация: 18.04.2015

Сообщений: 13

1

Поиск файлов по списку из файла

27.04.2020, 12:13. Показов 11368. Ответов 9


Студворк — интернет-сервис помощи студентам

Добрый день!

Есть задача:
Имеется папка XML с кучей вложенных подпапок (уровень вложения не менее 3, т.е. XMLподпапкиподпапкифайлы)

Имеется файл список.txt со списком файлов примерного содержания:

Кликните здесь для просмотра всего текста

f1.xml
f2.xml
fail3.xml

Нужно найти все указанные в списке файлы во всех подпапках и скопировать их в новую папку



0



Karen87

2408 / 968 / 444

Регистрация: 29.05.2016

Сообщений: 4,222

27.04.2020, 12:51

2

Пробуйте:

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@echo off
setlocal enabledelayedexpansion
for /f "tokens=* delims=" %%a in (spisok.txt) do (
    set "string=%%a"
    call :step_1
)
pause
exit
:step_1
for /f "tokens=* delims=" %%a in ('dir /a-d/s/b "XML"') do (
    if %%~nxa==!string! (
        xcopy "%%a" "C:test"
    )
)
exit /b

Добавлено через 8 минут
Соответственно:
spisok.txt — файл со списком файлов
«XML» — папка XML c большим уровнем вложения подкаталогов. Оставляете «XML» только при условии запуска сценария из той же папки, в которой лежит папка XML
«C:test» — каталог, в который будут скопированы найденные файлы. Создавать его предварительно не нужно, в процессе копирования он создаётся автоматически



0



0 / 0 / 0

Регистрация: 19.01.2021

Сообщений: 15

03.02.2021, 13:08

3

Karen87, добрый день.
А если в списке будут фигурировать только имена файлов без расширения, какие изменения нужно внести в Ваш код?



0



Karen87

2408 / 968 / 444

Регистрация: 29.05.2016

Сообщений: 4,222

03.02.2021, 13:17

4

viberezh, добрый. Вот так, наверное:

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@echo off
setlocal enabledelayedexpansion
for /f "tokens=* delims=" %%a in (spisok.txt) do (
    set "string=%%a"
    call :step_1
)
pause
exit
:step_1
for /f "tokens=* delims=" %%a in ('dir /a-d/s/b "XML"') do (
    if "%%~na"=="!string!" (
        xcopy "%%a" "C:test"
    )
)
exit /b



0



alpap

4331 / 2121 / 661

Регистрация: 26.04.2015

Сообщений: 6,823

04.02.2021, 14:49

5

Windows Batch file
1
2
3
4
5
6
7
@echo off
set "sF=spisok.txt"
set "sD=C:XML"
set "nD=newDir"
 
for /f "delims=" %%a in ('dir /a-d/b/s "%sD%"^|findstr /g:"%sF%"') do xcopy /iy "%%a" "%nD%"
pause



0



0 / 0 / 0

Регистрация: 19.01.2021

Сообщений: 15

05.02.2021, 10:32

6

alpap, добрый день.
Поиск файлов будет осуществляться по пути \dns320l-817Volume_1, но папка назначения для копирования найденных файлов лежит внутри по пути \dns320l-817Volume_1отобранные фото_тест, возможно её исключить из поиска?

Добавлено через 20 минут
И ещё 1 дополнение.
Имена файлов в следующем формате: 169668_название файла, количество цифр вначале не фиксированное, в списке для поиска будут находится именно начальные цифры из имен, искать нужно по ним.

Добавлено через 5 минут
И можно ли вывести в отдельный текстовый файл позиции из списка, которые не удалось найти?



0



Karen87

2408 / 968 / 444

Регистрация: 29.05.2016

Сообщений: 4,222

05.02.2021, 13:59

7

viberezh, пробуйте:

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@echo off
for /f "tokens=* delims=" %%a in (spisok.txt) do (
    call :step_1 "%%a"
)
pause
exit
:step_1
for /f "tokens=* delims=" %%a in ('dir /a-d/s/b "\dns320l-817Volume_1"') do (
    if not "%%~dpa"=="\dns320l-817Volume_1отобранные фото_тест" (
        for /f "tokens=1 delims=_" %%b in ("%%~nxa") do (
        if "%%b"=="%~1" (
            xcopy "%%a" "\dns320l-817Volume_1отобранные фото_тест"
            exit /b
        )
    )
    )
)
powershell -executionpolicy bypass -command "'%~1' | out-file '.not_found.txt' -append"
exit /b

Добавлено через 11 минут
Примечание.
Не забываем сохранить код в кодировке OEM-866 в случае наличия в файлах и путях к ним кириллицы



0



alpap

4331 / 2121 / 661

Регистрация: 26.04.2015

Сообщений: 6,823

05.02.2021, 17:50

8

Цитата
Сообщение от viberezh
Посмотреть сообщение

возможно её исключить из поиска?

Windows Batch file
1
2
3
4
5
6
7
@echo off
set "sF=C:spisok.txt"
set "sD=C:XML"
set "nD=C:XMLотобранные фото_тест"
 
for /f "delims=" %%a in ('dir /a-d/b/s "%sD%"^|find /v "%nD%"^|findstr /g:"%sF%"') do xcopy /iy "%%a" "%nD%"
pause

Цитата
Сообщение от viberezh
Посмотреть сообщение

вывести в отдельный текстовый файл позиции из списка, которые не удалось найти?

усложнит код существенно, ну хотя бы так (вы ведь задаете неполную маску файла, соответственно и «не найдем» мы что-то виртуальное)

Windows Batch file
1
2
3
4
5
6
7
8
9
10
@echo off
set "sF=C:spisok.txt"
set "sD=C:XML"
set "nD=C:XMLотобранные фото_тест"
set "log=C:log.txt"
 
for /f "usebackq delims=" %%a in ("%sF%") do (
  for /f "delims=" %%A in ('2^>^&1 dir /a-d/b/s "%sD%%%a*.xml"^|find /v "%nD%"') do echo %%a*.xml - %%A>>"%log%"& >nul xcopy /iy "%%A" "%nD%"
)
pause

Добавлено через 6 минут
если в логе нужны только не найденные маски файлов относительно списка. то строку 8 вывода for записать так:

Windows Batch file
1
... >nul xcopy /iy "%%A" "%nD%"|| echo %%a*.xml - %%A>>"%log%"



0



Karen87

2408 / 968 / 444

Регистрация: 29.05.2016

Сообщений: 4,222

05.02.2021, 18:25

9

Исправленный скрипт:

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@echo off
for /f "tokens=* delims=" %%a in (list.txt) do (
    call :step_1 "%%a"
)
powershell -executionpolicy bypass -command "$report=get-content '.not_found.txt' -encoding oem; $report | out-file '.not_found.txt' -Encoding default"
pause
exit
:step_1
for /f "tokens=* delims=" %%a in ('dir /a-d/s/b "\dns320l-817Volume_1"') do (
    if not "%%~dpa"=="\dns320l-817Volume_1отобранные фото_тест" (
        for /f "tokens=1 delims=_" %%b in ("%%~nxa") do (
        if "%%b"=="%~1" (
            xcopy "%%a" "\dns320l-817Volume_1отобранные фото_тест"
            set /A count+=1
        )
    )
    )
)
if not defined count (
    echo %~1>>not_found.txt
) else (
    set count=
)
exit /b

Примечание. Сохранять строго в кодировке OEM-866



0



alpap

4331 / 2121 / 661

Регистрация: 26.04.2015

Сообщений: 6,823

05.02.2021, 22:40

10

viberezh, на powershell поаккуратнее будет, пути свои поставьте, кодировку использовал utf-8, должна работать и 1251

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
$mask=gc  'C:spisok.txt'
$sPath=   'C:XML'
$exclude= 'C:XMLотобранные фото_тест'
$noMatch= 'C:noMatch.txt'
 
$file=gci $sPath -at !d -rec|? {$_.FullName -notLike "$exclude*"}
 
foreach ($i in $mask) {
  $outTr=$file.FullName -Match "[^\]+\$i[^\]*.xml"
  if (!$outTr) {$i+'*.xml' >> $noMatch}
  else {cpi $outTr $exclude}
}

запускать так:

Windows Batch file
1
powershell -nol -nop -ex Bypass -file "%Userprofile%Desktopscript.ps1"



1



Андрей Викторов


  • #1

Коллеги, приветствую!
Имеется текстовый файл (*.txt) с неким набором данных вида
———————
бла-бла-бла1
бла-бла-бла2
бла-бла-бла3
бла-бла-бла4
бла-бла-бла5
——————-
Это части имен файлов (цифры только чтобы показать что они разные).
Как «оптом» запустить, если в принципе возможно, поиск файлов, содержащих в именах все перечисленное?

densen


Андрей Викторов


  • #3

Но не зайти((
А возиться с обходными путями по некоторым причинам низя))

George

George

I wish I was a monster you think I am


  • #4

линкедин только через впн.

densen


  • #5

Но не зайти((
А возиться с обходными путями по некоторым причинам низя))

Объясню словами. Нужно упомянутый тобой тектовый файл положить в директорию, в которой будет производиться поиск, и в строку места поиска вбить путь к этому файлу и присовокупить спереди знак «@».

  • tc_search.png

    tc_search.png

    9.9 КБ

    · Просм.: 115

Последнее редактирование: 28.08.2022

Андрей Викторов


  • #6

Не получается((

1661696846835.png

densen


  • #7

«-» и «–» являются разными символами, согласись.

Андрей Викторов


  • #8

Дык я список то этот в тхт из ТС скопировал (думал, что «К» могли быть русскими или наоборот)…

В редакторе вбиваю «минус» на цифровой клавиатуре. Он просто в редакторе отображается как тире.

Последнее редактирование: 28.08.2022

svlasov


  • #9

Я полагаю, что так работать не будет. В текстовом файле для поиска строки должны быть вида *k-0455*. Тогда сработает.

1661699387162.png

Последнее редактирование: 28.08.2022

Андрей Викторов


  • #10

Так и есть((
В таком случае проще в тексте символ перевода каретки заменить на «* *» + в конце и в начале «*»
и вставить в строку поиска…

edogs software

На сайте с 15.12.2005

Offline

775

14 декабря 2016, 12:32

#1

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft

Масол

На сайте с 01.12.2006

Offline

264

14 декабря 2016, 12:35

#2

FileLocator

Достаточно мощная утилита. По спискам тоже ищет.

u3Bepr

На сайте с 03.03.2011

Offline

60

14 декабря 2016, 12:58

#3

в тотале Alt+F7 и ищите файлы как угодно :)

список можно преобразовать в строку через пробел, типа «custom* single*»

1

sten-s

На сайте с 04.12.2009

Offline

92

14 декабря 2016, 13:02

#4

Масол:
FileLocator

Достаточно мощная утилита. По спискам тоже ищет.

спасибо! Подскажете, где там по файлу искать (списку имен), не могу найти(

———- Добавлено 14.12.2016 в 16:03 ———-

u3Bepr:
в тотале Alt+F7 и ищите файлы как угодно :)

там в сроку помещается ограниченно количество имен. как сразу искать по 200 имен не понятно

SeVlad

На сайте с 03.11.2008

Offline

1561

15 декабря 2016, 08:15

#5

sten-s:
там в сроку помещается ограниченно количество имен.

Не «ограниченно количество имен», а 2047 символов.

sten-s:
как сразу искать по 200 имен не понятно

Можно использовать регулярки.

Можно переключиться на вкладку «плагины» стандартного поиска ТС.

Можно спросить на руборде, а тут потом поделиться найденным решением.

Делаю хорошие сайты хорошим людям. Предпочтение коммерческим направлениям. Связь со мной через http://wp.me/P3YHjQ-3.

PA

На сайте с 12.02.2016

Offline

24

15 декабря 2016, 10:47

#6

как все тут сложно… :)

sten-s:
Есть список названий файлов — около 2000. Нужно их все найти на компе. Вроде, простая задача, но не пойму как это сделать. в тотал коммандере нет такого( или я не нашел

1. Создаем список существующих файлов на компе с полными путями.

find . -type f >filelist.txt

2. Из этого списка выбираем необходимые «около 2000» файлов.

grep -f search2000.txt filelist.txt >result.txt

Это все.

Под виндой есть порты финда и грепа.

Upd: почитал хелп у дир-а, под виндай первый пункт можно сделать нативно:

dir /b /s /a:-d >filelist.txt

. . .

SeVlad

На сайте с 03.11.2008

Offline

1561

15 декабря 2016, 14:48

#7

ps axf:
Создаем список существующих файлов на компе с полными путями.

А???!!!!

Моё сердце стало быстрее, чем взорвался процессор и кончилась память компа :)

1

Введение

С течением времени на жестком диске компьютера накапливается огромное количество информации. Прежде всего, это периодические электронные журналы типа Internet Zone, почтовые рассылки и просто Веб-страницы и целые сайты, которые мы загружаем на диск в надежде найти им достойное применение потом, когда-нибудь. Чтобы воспользоваться полезной информацией, которой мы часто запасаемся впрок, необходимо иметь хороший поисковик, который позволял бы быстро и удобно находить нужную страницу, открывать ее и использовать в работе. Программ, которые подходили бы для целей поиска не так уж и много.
Мне известно несколько таких программ, о которых и пойдет речь далее. Для примеров и сравнительного тестирования я буду использовать папку, в которой у меня собраны журналы Internet Zone. Объем папки 139 мегабайт, количество файлов — 23075, формат файлов — HTML.

Поисковая утилита AVSearch

«Программа предназначена для поиска файлов по фрагментам текста в любой русской кодировке. Возможен поиск в архивах, в КЭШах Web-браузеров, на сетевых дисках, в «Корзине» и т.д.» — так представляет свою программу сам автор.
Из характеристик поисковика основное значение имеют следующие:

Доступные форматы файлов — TXT, HTML, RTF, архивные и бинарные файлы.
Язык запросов — логические операции И, ИЛИ, НЕТ, ? (любой символ в маске).
Зона поиска — реальная папка на диске.

Удобная навигация среди найденных файлов и возможность открыть любой из них непосредственно в поисковике — это обязательное свойство в данной программе присутствует.

В рабочем состоянии поисковик выглядит так:

Здесь можно прочитать характеристики тестового поиска: искались документы, содержащие слово «norton». Поиск занял 3 минуты 57 секунд, было просмотрено 28623 файла и найдено 464, удовлетворяющих поисковому заданию.

Контекстное меню для найденного файла имеет такой вид:

Просмотреть текст документа можно в правом окне целиком, но при открытии документа из контекстного меню он открывается в браузере и становятся работоспособными гиперссылки и графика.

Сервис, предоставляемый этой программой вполне удовлетворительный, а значительное время сканирования большой папки компенсируется тем, что не требуется предварительного индексирования зоны поиска, обязательного при добавлении новых папок и файлов.

Отметим, что программа — русскоязычная, и разобраться в ее применении очень просто.

Домашняя страница: http://www.avtlab.ru/software.htm
Ссылка для загрузки программы (821 Кбайт): линк

Поисковая система diskMETA- Lite

Основное окно этого поисковика выглядит так:

Здесь виден результат поиска по тестовому запросу «norton». Найдено 57 документов (в AVSearch — 464). Оказывается, в этом бесплатном варианте индексируются для поиска только 1000 документов, поэтому большая часть файлов поисковой зоны оказались проигнорированными, а результат, соответственно, куцым. Другим ограничением бесплатного варианта является возможность использования только двух зон поиска. Хотя эта программа больше похожа на рекламный ролик, посмотрим ее характеристики:

Формат документов — DOC, TXT, HTML. В платной версии дополнительно — XLS, RTF.
Язык запросов — логические операторы И, И НЕ, ИЛИ, операторы уточнения запроса, учет грамматической формы ключевых слов.
Зона поиска — индексный файл. Использование индексного файла позволяет производить поиск мгновенно (в AVSearch — 4 минуты) за счет того, что сканирование уже выполнено при индексации. Но, если Зона поиска изменилась, то для получения корректного результата индексирование нужно произвести
заново, причем, в нашем конкретном случае оно займет время более 4 минут для полнофункционального варианта данной программы.

Результаты поиска выдаются отсортированными по мере убывания адекватности запросу. Приводится фрагмент документа с ключевыми словами. Для просмотра документ открывается внешним Приложением, в нашем случае, браузером.

Домашняя страница: http://www.diskmeta.com/
Ссылка на страничку загрузки: линк

Примечание: Для загрузки нужно посетить страницу и заполнить небольшую форму. Полнофункциональный вариант распространяется по принципу: «Деньги вперед».

Персональная поисковая система «Ищейка»

Так назван русскоязычный вариант поисковика, разработки немецкой фирмы iSLeuthHound Technologies. Основное окно с результатом тестового поиска выглядит так:

Как видим, здесь по запросу «norton» найдено всего 23 документа. То же, что и в предыдущем случае — поисковая зона ограничена числом до 500 файлов для данного бесплатного варианта, поэтому и результат получился скудным.

Основные характеристики:

Формат документов — TXT, DOC, RTF, HTML. С плагинами дополнительно — ZIP, PDF, ASP, XLS.
Язык запросов — логические операторы И, ИЛИ, НЕТ, скобки (), учет словоформы ключевых слов.
Зона поиска — индексный файл.

С найденным файлом можно распорядиться в соответствии с контекстным меню:

Документ открывается внешним Приложением в соответствии с типом файла. Имеется возможность посмотреть, как выглядит полнофункциональный вариант этой программы. Этот вариант — англоязычный и имеет гордое имя TheSleuthhound! Pro 4.21 PowerPack. Давайте посмотрим:

Так выглядит окно управления с фирменными символами, а так — окно с результатом тестового поиска:

Здесь найдено 452 документа, и мы вплотную приблизились к результату (AVSearch — 464). Видно, что найденные документы отсортированы по дате создания, но можно сортировать по признаку: Имя, Папка, Размер, Время создания.

В целом, нужно отметить, что уровень программы довольно высокий — профессионально сделана для профессионального применения.

Примеры непрофессионального применения поисковой системы «Ищейка»: имея такой быстрый поисковик и приличную информационную базу, можно, наверное, кроме прямого поиска нужных документов использовать как-то и другие возможности. Я, например, нашел одно применение, связанное со статистикой. Так статистика слова Траффик равна 63, а слова Трафик = 162, откуда следует, что по большинству голосов лучше писать Трафик а не Траффик. Броузер = 162, Браузер = 1139; В общем = 1932, Вобщем = 9 и т.д. Вот такая интересная статистика по правописанию.

Индексный файл: При индексации Зоны поиска под именем I-Zone объемом 139 мегабайт, эта программа отобрала 13104 подходящих файла и описала их в нескольких бинарных файлах формата CNK, расположив их в папке ИщейкаDBi-zone с общим размером 38.5 Мбайт. Под Индексным файлом, видимо, надо подразумевать всю эту папку.

Сравнение с обычными поисковиками: Обычные поисковики файлов, такие, например, как в Windows Commander, неплохо и достаточно быстро обрабатывают простые запросы (из одного слова). Трудности начинаются при дальнейшем поиске в найденных файлах. Поскольку контекста нет, придется открывать и просматривать каждый файл, что при простом запросе практически невозможно из-за большого их числа. Чтобы сократить число найденных файлов, можно развернуть запрос, например, так как это сделано в следующем примере:

Здесь вместо ключевого слова «norton» , по которому было найдено 460 файлов введена фраза «Norton Utilities 2000» , по которой найдено всего 4 файла. Для проверки качества поиска привлечена полнофункциональная «Ищейка», которая нашла по этому запросу 9 документов, причем все они — правильные. Это говорит о том, что простые поисковики файлов не обеспечивают качественного поиска информации. С такими документами, как DOC, PDF, RTF простые поисковики вообще не работают.

Поисковая программа «Ищейка» — очень хорошая, быстрая, удобная и понятная программа, которая, к тому же, работает безотказно.

Домашняя страница: http://www.isleuthhound.com/ru/sleuthhound/
Ссылка для загрузки программы (2.24 Мбайт): линк

Поисковая утилита Xteq X-Find

«Просто выберите, где и что нужно найти, и нажмите «go»; это — все, что Вы должны делать. Вы можете даже определить текст, который должен быть внутри файлов» — так представляет свою программу сам автор.

Этикетка разработчика и самой программы выглядит так:

Основное окно с результатом тестового поиска имеет следующий вид:

Как видим, по запросу «norton» найдено 460 документов, то есть первый тест прошел успешно. В собственном окне программы можно просмотреть каждый документ полностью, причем ключевое слово подсвечивается. Все файлы в просмотрщике открываются, как текстовые, то есть формат HTML мы видим вместе с тегами. Это не очень удобно, но разобраться в содержании можно. В окне программы контекстное меню Проводника не действует, поэтому открыть документ нормальным способом здесь нельзя.

Продолжим тестирование:

Запрос «norton utilites» — 6 («Ищейка» нашла 10).

Как видим, этот результат — не совсем удачный, но у программы имеется немало привлекательных качеств. Это:

Малый размер (181 Кбайт),
Ненужность инсталляции,
Простота применения( ни одной настройки),
Удобный интерфейс (три панели),
Четкая отработка простых запросов,
Бесплатность и доступность распространения.

Все это свидетельствует о том, что для многих пользователей этот миниатюрный поисковик может стать удобным и полезным инструментом.

Домашняя страница: http://xteq.com/products/xfnd/index.html
Ссылка для загрузки программы (181 кб): линк

Agent Ransack

Основное окно (продвинутый вариант) этого поисковика выглядит так:

Здесь виден результат поиска по тестовому запросу «norton». Найдено 425 документов («Ищейка» — 453). Этот тест будем считать успешным. Результат второго теста по запросу «norton utilites» виден на следующей картинке:

Здесь виден вид окна в упрощенном варианте, а также результат поиска. Найдено 10 файлов («Ищейка» — 10). Результат вполне удачный.

Эта утилита имеет и другие привлекательные особенности:

С началом поиска открывается окно анимации с показом папок сканирования в данный момент, а также Прогресс-бар и числовой указатель состояния поиска. Все это очень удобно и оставляет приятное впечатление о программе.
В окне просмотра показываются строки с ключевым словом, которое подсвечивается. Объем фрагмента достаточен, чтобы уяснить содержание всего документа в контексте ключевого слова.
В окне списка найденных файлов в полном объеме действует контекстное меню Проводника, что позволяет открыть, копировать, переместить и т.д. найденный файл.

Организация поиска:

Название файла. Если название не задается, это означает, что нужно смотреть все файлы. Лучше задать тип файла, например, *.htm — это может значительно сократить время поиска. Так, тест «norton» в первом случае выполняется 3 минуты 53 секунд, а во втором варианте (с маской) — 2 минуты 51 секунду, на минуту быстрее.

Содержание файла. Задается как строковое выражение. Чем больше слов в строке, тем точнее задание и тем более подходящих документов будет отсеяно, поскольку поисковик не учитывает автоматически словоформы и варианты строки.

Зона поиска. Задается в виде одной папки ( кнопка Browse for Single Folder) или нескольких папок (кнопка Browse for multiple Folder).

Регулярные выражения. «Регулярные выражения — это механизм, позволяющий задать шаблон для строки и осуществить поиск данных, соответствующих этому шаблону в заданном тексте». Регулярные выражения в данном поисковике могут применяться как для задания ключевой строки, так и имени файла и существенно уточнить запрос. Но, к сожалению, воспользоваться этим механизмом сложновато — нужно не только хорошо уяснить сами правила составления шаблона, но еще и набить хоть немного руку на этом деле. Помощь в составлении шаблонов оказывает Мастер (кнопка Expression Wizard), но чтобы воспользоваться Мастером, правила все равно нужно знать.

Использование регулярных выражений — это, наверное, признак профессионального применения данной программы. Но и при любительском использовании данным поисковиком можно получать вполне приличные и полезные результаты, что позволяет мне рекомендовать эту программу пользователям, которые регулярно занимаются поиском информации на собственном компьютере, и которых «Ищейка» по каким-то причинам не устраивает.

Домашняя страница: http://www.agentransack.com/
Ссылка для загрузки программы (1.5 Мбайт): линк

EF Find

Внешний вид поисковика с результатами второго теста с ключевой строкой «norton utilites» показан на картинке:

Как видим, найдено 10 файлов («Ищейка» — 10 ). Это хороший показатель. Обращаем внимание на наличие русскоязычного интерфейса и на отсутствие контекстного просмотра ключевого слова. Что можно сделать с найденными файлами хорошо видно на следующей картинке:

Здесь раскрыто содержание меню «Файл», в котором можно уточнить смысл двух команд:

Выполнить — для файла HTML означает — открыть в web-браузере,
Редактировать — означает открыть в Блокноте.

Хотя текстовый поиск — не основное назначение это утилиты, надо отметить, что эту задачу она выполняет хорошо. На второй картинке видно, что по первому тесту с ключевым словом «norton» найдено 420 файлов, что является вполне нормальным. Наиболее существенным достоинством утилиты является поиск в архивах ACE, ARC, ARJ, BZIP2, CAB, GZIP, LHA, RAR, TAR, TGZ, ZIP и ZOO. Найти в дистрибутиве Windows нужную библиотеку — дело и скучное, и долгое. EF Find проделывает такую работу и весело, и быстро. На следующей картинке показан пример поиска библиотеки:

Как видим, поиск завершился успешно. С найденной библиотекой можно обойтись так, как позволяет Проводник Windows и Архиватор по умолчанию. В архивах можно производить также текстовый поиск. Дополнительно к сказанному можно отметить еще следующие возможности поисковой утилиты EF Find:

Сохранение результатов поиска: Экспортировать список можно в файл формата TXT, CSV или HTM. В последнем случае список сохраняется в виде таблицы, а найденные файлы — в виде гиперссылок, которые можно активизировать для просмотра в браузере или для запуска исполняемых файлов.

Регистрация и дерегистрация модулей: Найденные модули OCX, DLL (драйверы и библиотеки) можно зарегистрировать в реестре или наоборот снять регистрацию, если модуль удаляется.

Имена файлов: В дополнение к тому, что мы видим на картинках, имена файлов могут задаваться списком, через запятую, или с использованием регулярных выражений.

Отметим, что показанные выше скриншоты сделаны при работе с программой версии 1.3. В последней версии (2.3) вид основного окна несколько изменился, но смысл и содержание программы остались прежними.

В целом, нужно признать, что EF Find — хороший поисковик, в некоторых случаях — просто незаменимый, но, к сожалению — платный. Незарегистрированная программа работает недостаточно хорошо.

Основной сайт: http://www.efsoftware.com
Ссылка для загрузки программы (993 Кбайт): линк
Ссылка для загрузки программы (вер. 1.3, 370 Кбайт): линк

File Finder

«Быстрый и простой поиск любых файлов на вашем компьютере или в локальной сети» — так представляет свою программу автор.

Имя файла и место поиска: Это основная вкладка программы, на которой формируется задание на поиск (запрос). Если требуется найти файл по имени, то указывается зона поиска — папка, включающая вложенные папки и имя файла, в котором можно использовать символы (*) и (?). В текстовом поиске имя файла не указывается, но желательно указать тип файла.

Тип файла: Как видим, этот поисковик может работать практически со всеми типами файлов, включая такие форматы, как DOC, XLS, PDF, HTML, TXT — главные форматы, в которых распространяется различная документация и повседневная информация. Задавая тип файла, мы уточняем запрос и ускоряем поиск, так как при сканировании неотмеченные типы файлов не просматриваются.

Вкладка «Дополнительно»: На этой вкладке можно уточнить задание на поиск, в частности, указать нужно ли учитывать регистр буквенных символов, нужно ли просматривать ZIP-архивы и в каких кодировках искать текстовую строку. Для кириллицы поддерживаются все возможные кодировки, что особенно важно, если основной формат ваших документов — HTML.

Еще более сузить зону поиска можно, задав интервал дат создания или изменения интересующих нас файлов. При необходимости так можно отсечь устаревшие документы или, наоборот, слишком новые.

Настройка: На этой вкладке задаются долговременные параметры поисковика, смысл которых, в основном, ясен из их названия. После опции «Отчет» идут опции, определяющие состав (содержание) собственно «Отчета» — текстового списка найденных файлов, которые можно сохранить в файл формата TXT или CSV (Excel).

Контекстное меню: Контекстное меню найденного файла определяет наши возможности воспользоваться результатом поиска. Файл можно Запустить, Копировать, Удалить или просмотреть свойства. Можно просмотреть Отчет (Список найденных файлов) или сохранить его в файл.

Можно использовать новый инструмент, который носит название поиск «В найденном», который значительно убыстряет поиск и открывает новые возможности постепенного уточнения запроса без повторного сканирования всей зоны поиска. Этот режим запускается кнопкой «В найденном».

Обратим внимание на кнопку «Go back», Эта кнопка позволяет вернуться в предыдущее состояние с результатом по начальному запросу, изменить запрос и вновь «Искать в найденном». И так — пока не будет найден нужный документ. Все это — исключительно важная и полезная особенность этой программы. Часто, начиная поиск, мы не можем достаточно точно сформулировать запрос и, только просмотрев несколько документов, получаем возможность сделать уточнение и возможность искать в найденном значительно экономит время.

Контекст ключевого слова: При наведении мышкой на файл всплывает контекст ключевой фразы (слова), который позволяет сделать предварительную оценку содержания данного документа не открывая его в полном объеме.

О программе: Здесь приведены сведения о программе и разработчике, а также о бесплатной регистрации данной копии программы File Finder.

Тестирование программы: Для примеров и сравнительного тестирования использовалась, как и при описании других программ данного раздела папка с журналами Internet Zone. Объем папки 139 мегабайт, количество файлов — 23975, формат файлов — HTML, JPG и GIF.

В этой папке искались последовательно текстовая строка «norton» и, затем, «norton utilites». Результат поиска сравнивался с результатами, полученными с помощью других поисковиков и, таким образом, я мог оценить работоспособность данной программы. Сразу отмечу, что данный поисковик по полноте поиска файлов показал результаты, аналогичные результатам авторитетного поисковика «Ищейка».

Кроме того, текстовый поиск проверялся в файлах формата EXE, PDF, DOC, CHM, MP3. Только в файлах формата CHM поиск не имел успеха, в остальных случаях ключевые слова были найдены полностью. Таким образом, программа File Finder работоспособна в очень широком диапазоне форматов файлов, содержащих текстовые фрагменты и вставки. Итак, определился лидер нашего обзора — доступный поисковик с универсальными возможностями и хорошими удобствами. Автор рекомендует свой поисковик в качестве альтернативы штатному поисковику Windows. Со своей стороны могу подтвердить, что данная программа по функциональным возможностям и удобству применения значительно превосходит штатное средство поиска Windows.

Страница с реквизитами бесплатной регистрации программы выглядит так:

Посетить эту страницу можно по ссылке: линк

Домашняя страница: http://www.sitex.com.ua/ru/si-Finder/index.htm
Ссылка для загрузки программы (280 Кбайт): линк

Заключение

Для поиска нужной информации в массе файлов и документов, накопившихся на жестком диске целесообразно применять специальную программу-поисковик. Если формат документов однообразный и достаточно простой (только TXT и HTML), то можно обойтись утилитой AVSearch. При разнообразии типов документов потребуется изощренная поисковая система Ищейка или ее украинский аналог DiskMeta.

File Finder — программа для текстового поиска документов на компьютере, работающая практически, со всеми форматами документов и с архивами ZIP и удобно реализующая поиск в найденном. Эта очень толковая утилита может быть полезной для всех пользователей, которым приходится заниматься поиском документов и файлов на собственном компьютере или в локальной сети.

Практические примеры, которые приведены в этой статье, помогут вам освоить очень эффективную и крайне полезную команду find.

Она используется для поиска файлов и папок через командную строку Linux.

Команда find — одна из самых мощных и широко применимых команд. При этом она крайне объёмная и насчитывает более 50 опций, в которых легко запутаться, особенно в сочетании с командами exec или xargs.

Если вы сисадмин или разработчик, избежать команды find при работе с командной строкой не получится. Так что давайте научимся её не бояться и пользоваться её возможностями в полной мере.

Для этого разберём самые распространённые случаи практического применения команды find. Но для начала покажу вам синтаксис и принцип работы с командой.

Команда find в Linux

Общий синтаксис команды find выглядит так:

find [directory to search] [options] [expression]

Всё, что в квадратных скобках, указывать необязательно. А значит, выполнить команду find можно вообще без опций и параметров. Она выдаст список всех файлов и папок в текущем расположении. Мало полезного, да?

Так что давайте взглянем на параметры подробнее:

  • directory to search (папка поиска) — это расположение, с которого вы хотите начать поиск. Поиск по умолчанию рекурсивный и начинается с текущего расположения.
  • options (опции) содержит указание типа поиска: по имени, типу файла, времени изменения и так далее — тут может быть более 50 вариантов.
  • expression (выражение) содержит поисковый запрос. Если вы ищете файл по имени, параметр expression должен содержать имя файла. Если ищете файлы с именем, соответствующим заданному шаблону, поисковое выражение — это шаблон.

Приведу простой пример:

find . -type f -name myfile

Такая команда выполнит поиск файла (именно файла, не папки) с именем myfile в текущей папке и подпапках. Опция -type f сужает поиск до файлов. Точка (.) указывает на текущую папку.

Рассмотрим несколько примеров применения команды find.

Поиск файлов и папок по имени

Так выполняется поиск файлов и папок по имени:

find . -name SEARCH_NAME

Поскольку тип объекта не указан, команда выполняет поиск и файлов, и папок.

Пример ниже — поиск файлов и папок с именем «mystuff»:

abhishek@LHB:~/Examples$ find -name mystuff
./new/mystuff
./mystuff

Поиск только файлов или только папок

Если нужно искать только файлы, на помощь придёт опция type -f:

find . -type f -name SEARCH_NAME

Тип и имя можно указывать в любом порядке. Возьмём пример выше и ограничим круг поиска файлами:

abhishek@LHB:~/Examples$ find -type f -name mystuff
./mystuff

Если нужно найти папку, укажите тип type -d:

find . -type d -name SEARCH_NAME

Вот пример нашего поиска уже по папкам:

abhishek@LHB:~/Examples$ find -type d -name mystuff
./new/mystuff

Поиск без учёта регистра

Команда find по умолчанию учитывает регистр. Чтобы выполнить поиск по имени файла без учёта регистра, надо ввести опцию -iname вместо -name.

find . -type f -iname SEARCH_NAME

С поиском по папкам (type -d) это тоже работает.

abhishek@LHB:~/Examples$ find -iname mystuff
./new/mystuff
./MyStuff
./mystuff

Скриншот последних трёх примеров:

image

Поиск файлов по расширению (важно)

Одно из самых популярных применений команды find — поиск файлов определённого типа, то есть по заданному расширению.

Скажем, вы хотите найти все файлы С++ в текущих папках. Файлы С++ имеют расширение .cpp, и вот как их можно найти:

find . -type f -name "*.cpp"

С такими опциями команда find найдёт только файлы (-type f) с именами, оканчивающимися на .cpp.

abhishek@LHB:~$ find . -type f -name "*.cpp"
./file.cpp
./.cargo/registry/src/github.com-1ecc6299db9ec823/libz-sys-1.1.3/src/zlib/contrib/iostream2/zstream_test.cpp
./.cargo/registry/src/github.com-1ecc6299db9ec823/libz-sys-1.1.3/src/zlib/contrib/iostream/test.cpp
./.cargo/registry/src/github.com-1ecc6299db9ec823/libz-sys-1.1.3/src/zlib/contrib/iostream/zfstream.cpp

При работе с командой find всегда заключайте поисковое выражение в двойные кавычки.

С чем связана рекомендация заключать поисковый запрос в двойные или одинарные кавычки? Дело в том, что без кавычек оболочка будет работать с символом * как с джокером и выполнит подстановку.

Вот что будет, если ввести запрос без кавычек:

find . -type f -name *.cpp

Оболочка распознает подстановочный знак * и заменит его всеми файлами в текущей папке, чьи имена заканчиваются на .cpp.

Это сработает, если такой файл всего один, но если их несколько, оболочка пожалуется на некорректный синтаксис.

image

В нашем случае файл .cpp всего один, и после подстановки команда выглядит так: find . -type f -name file.cpp. Она работает, поскольку file.cpp — корректный поисковый запрос.

А вот файлов .txt в той же папке два, и когда команда расширяется до find . -type f -name another.txt new.txt, выводится предупреждение, потому что поисковых запросов больше одного.

Именно поэтому сам поисковый запрос всегда следует заключать в двойные кавычки.

Поиск нескольких файлов с несколькими расширениями (или условием)

Команда, рассмотренная выше, нужна для поиска файлов по расширению. А что если нужно найти файлы с несколькими разными расширениями?

Вместо того чтобы прогонять команду find несколько раз, введите её один раз с опцией -o, которая работает как логическое условие «или»:

find . -type f -name "*.cpp" -o -name "*.txt" 

Например:

abhishek@LHB:~/Examples$ find . -type f -name "*.txt" -o -name "*.cpp"
./new.txt
./file.cpp
./new/new.txt
./new/dir2/another.txt
./new/dir1/new.txt
./another.txt

Поиск файлов в заданной папке

Все приведённые примеры иллюстрируют поиск в текущей папке, потому что команда включает в себя точку (.).

Чтобы выполнить поиск в заданной папке, не покидая текущего расположения, можно заменить точку абсолютным или относительным путём к нужной папке.

abhishek@LHB:~/Examples$ find ./new -name mystuff
./new/mystuff

Поиск файлов в нескольких папках

Если нужные вам файлы могут находиться в нескольких папках, можно выполнить поиск во всех этих расположениях за один раз. Просто укажите все пути к папкам при введении команды find:

find ./location1 /second/location -type f -name "pattern"

Поиск пустых файлов и папок

Опция -empty позволяет использовать команду find для поиска пустых файлов и папок.

Найти таковые в текущей папке можно следующим образом:

find . -empty

Можно указать тип объектов, чтобы искать только файлы или только папки:

find . -empty -type f

Кроме того, можно в таком режиме искать файлы по имени:

find . -empty -type f -name "*.cpp"

image

Поиск крупных и мелких файлов (поиск по размеру файла)

Команда find поможет найти крупные или мелкие файлы, если выполнить поиск по размеру. Но это работает только для файлов, не для папок.

Используется опция -size с аргументом +N для файлов размером более N и -N для файлов размером менее N.

А вот как можно найти файлы точного заданного размера (50 КБ):

find . -size 50k

Так выполняется поиск файлов размером более 1 ГБ в текущей папке:

find . -size +1G

А так — файлов, не превышающих 20 байт:

find . -size -20c

Для поиска файлов размером более 100 МБ, но менее 2ГБ, введите:

find . -size +100M -size -2G

Поиск по размеру тоже можно сочетать с поиском по имени файла. Таким образом, найти в корневом каталоге все файлы размером более 500 МБ с именем, оканчивающимся на .log, можно так:

find / -size +500M -name "*.log"

Для справки:

  • c – байты
  • k – килобайты
  • M – мегабайты
  • G – гигабайты

Поиск недавно изменённых файлов (поиск по времени изменения или создания)

Вы ведь знакомы с параметрами mtime, atime и ctime?

  • Mtime – время последнего изменения файла
  • Ctime – время создания файла
  • Atime – время последнего доступа к файлу

Вы не раз столкнётесь с ситуацией, когда нужен список всех недавно изменённых файлов. В таких случаях на помощь приходит поиск по времени изменения.

Найти все файлы, претерпевшие изменения за последние трое суток (3*24ч), можно так:

find . -type f -mtime -3

А все файлы, созданные пять и более дней назад, ищутся так:

find . -type f -ctime +5

Понимаю, что 24 часа — большой срок. Что если нужно выявить файлы, изменённые всего пару минут назад? Для этого предусмотрены опции mmin, amin и cmin.

Так выглядит команда поиска всех файлов, изменённых за последние пять минут:

find . -type f -mmin -5

image

Можно не только указать имя файла, но и ограничить временной промежуток с двух сторон. Команда ниже выполнит поиск всех файлов .java, изменённых не ранее 30 и не позднее 20 минут назад.

find . -type f -mmin +20 -mmin -30 -name "*.java"

Поиск файлов с определёнными настройками доступа

Надеюсь, вы имеете представление о разрешениях файлов в Linux.

Команда find позволяет выполнить поиск файлов по разрешению и режиму доступа.

find -perm mode

Поищем в текущей папке, к примеру, все файлы с режимом доступа 777:

find . -perm 777

А так можно найти все файлы с правами на чтение и запись для всех типов пользователей (только точное совпадение; файлы с правами на выполнение для всех не отобразятся):

find . -perm a=r+w

Поиск файлов по владельцу

Можно также найти файлы, принадлежащие определённому пользователю.

Вот как обнаружить в текущей папке все файлы пользователя Джона:

find . -type f -user John

Эта опция сочетается с другими, будь то размер или время и имя файла:

find . -type f -user John -name "*.cpp"

Отключение рекурсивного поиска для поиска только в текущей папке

По умолчанию команда find выполняет поиск во всех подпапках текущего расположения. Если это не требуется, можно ограничить глубину поиска значением «1». Так вы ограничитесь поиском в текущей папке, не залезая в подпапки.

find . -maxdepth 1 -type f -name "*.txt"

image

Исключение папки из поиска

Если нет необходимости производить поиск в той или иной папке, можно исключить её с помощью опций path, prune и логического «или».

find . -path "./directory_exclude/*" -prune -o -name SEARCH_NAME

Будьте внимательны: путь к папке должен оканчиваться на *, затем идёт -prune и только потом -o.

Попросту говоря, при поиске с опцией prune папка, указанная с помощью path, игнорируется. Prune всегда сопровождается флагом -o (логическое «или»), чтобы папки, которые не были исключены, просматривались на наличие искомого объекта.

Дальнейшая работа с результатами команды find: exec и xargs

Итак, мы изучили различные способы поиска файлов по заданным параметрам. Это хорошо. А теперь следующий шаг: рассмотрим, какие действия можно выполнять с результатами команды find.

Например, как найти файлы с именем, соответствующим определённому шаблону, и переименовать их за одно действие? Или выявить и удалить пустые файлы?

Вам уже известно, что в Linux можно использовать перенаправление ввода-вывода, чтобы объединить результаты одной команды с вводом другой. Но с результатами команды find это не сработает — по крайней мере, не напрямую.

Чтобы выполнить действия над результатом команды find, есть два варианта:

  • Применить exec
  • Применить xargs

Использование find и exec

Допустим, вам нужен подробный список (ls -l) файлов, найденных командой find. Вот как его получить:

find . -type f -name "*.txt" -exec ls -l {} +

Результат будет таким:

abhishek@LHB:~/Examples$ find . -type f -name "*.txt" -exec ls -l {} +
-rw-rw-r-- 1 abhishek abhishek 39 Oct 13 19:30 ./another.txt
-rw-rw-r-- 1 abhishek abhishek 35 Oct 13 15:36 ./new/dir1/new.txt
-rw-rw-r-- 1 abhishek abhishek 35 Oct 13 15:36 ./new/dir2/another.txt
-rw-rw-r-- 1 abhishek abhishek 35 Oct 13 18:51 ./new/mystuff/new.txt
-rwxrwxrwx 1 abhishek abhishek 35 Oct 13 15:37 ./new/new.txt
-rw-rw-r-- 1 abhishek abhishek 35 Oct 13 18:16 ./new.txt

Многие забывают ввести {} + в конце команды exec. Но это необходимо — как и пробел между скобками {} и плюсом +.

Фигурные скобки ссылаются на результат выполнения команды find. Их содержимое может иметь следующий вид: {файл 1, файл 2, файл 3}. Символ + используется как конец команды exec.

Есть ещё один вариант оформления exec:

find . -type f -name "*.txt" -exec ls -l {} ;

В данном случае плюс заменён на точку с запятой. Дополнительная косая черта означает, что точка с запятой не является специальным символом.

Преимущество сочетания {} + заключается в меньшем количестве команд ( ls -l file1 file2 file3), тогда как комбинация {} ; запустит цепочку ls -l file1, ls -l file2 и так далее.

Однако сочетание {} ; даёт возможность использовать {} несколько раз в одном и том же выражении exec. Так, приведённая ниже команда переименует все обнаруженные файлы с расширением .old.

find . -type f -name "*.txt" -exec mv {} {}.old ;

Использование команды xargs

Многие пользователи Linux сталкиваются с необходимостью перенаправления ввода-вывода довольно часто. Но команда exec с цепочкой символов {} + кажется им слишком сложной.

И тут на помощь приходит xargs. Нужно просто перенаправить вывод команды find в команду xargs через конвейер.

find . -type f -name "*.txt" | xargs ls -l

image

Синтаксис куда проще, верно? К тому же команда xargs тоже весьма эффективна. Подробнее о ней — в статье по ссылке.

Сочетание команд find и grep

Теперь вы умеете совмещать команду find с xargs и exec, и пора перейти на следующий уровень — объединить find и grep.

Для сисадминов и разработчиков комбинация команд find и grep — одна из самых распространённых и вместе с тем самых полезных.

Команда find находит файлы с именем, соответствующим шаблону, а затем команда grep выполняет поиск по их содержимому.

Например, вам нужно найти все файлы .txt, в которых есть имя «Alice». Объединить команды find и grep можно так:

find . -type f -name "*.txt" -exec grep -i alice {} +

А можно с помощью xargs:

find . -type f -name "*.txt" | xargs grep -i alice

image

Конечно, пример элементарный, но если команда grep вам знакома, можете использовать её на своё усмотрение.

И это далеко не все возможности команды find…

Перечислить все опции и примеры использования команды find практически невозможно. Её возможностям нет границ, но если вы освоите её принципы, она окажется очень кстати во многих ситуациях. Решающий фактор — как сочетается логика действия разных опций и команд.

Надеюсь, моя подборка примеров использования find была для вас полезна. Если у вас есть вопросы или предложения, как сделать эту статью лучше, добро пожаловать в комментарии.


НЛО прилетело и оставило здесь промокоды для читателей нашего блога:

— 15% на все тарифы VDS (кроме тарифа Прогрев) — HABRFIRSTVDS.

— 20% на выделенные серверы AMD Ryzen и Intel Core — HABRFIRSTDEDIC.

Доступно до 31 декабря 2021 г.

Понравилась статья? Поделить с друзьями:
  • Гель лак отошел от ногтя как исправить
  • Как найти свою команду в орифлейм
  • Просто найдите такого же сумасшедшего как вы
  • Как найти программу на компьютере чтобы удалить
  • Как правильно составить портфель инвестора