Команда find в linux

Примеры использования find

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

find / -name “file.txt”

* в данном примере будет выполнен поиск файла с именем file.txt по всей файловой системе, начинающейся с корня .

Поиск файла по части имени:

* данной командой будет выполнен поиск всех папок или файлов в корневой директории /, заканчивающихся на .tmp

Найти все файлы или папки, которые начинаются на sess_ и заканчиваются на cd

find . -name “sess_*” -a -name “*cd”

* -a: логическое И, -o: логическое ИЛИ.

Поиск по дате

1. Поиск файлов, которые менялись определенное количество дней назад:

find . -type f -mtime +60

* данная команда найдет файлы, которые менялись более 60 дней назад.

2. Поиск файлов с помощью newer. Данная опция доступна с версии 4.3.3 (посмотреть можно командой find –version).

а) дате изменения:

find . -type f -newermt “2019-11-02 00:00”

* покажет все файлы, которые менялись, начиная с 02.11.2019 00:00.

find . -type f -newermt 2019-10-31 ! -newermt 2019-11-02

* найдет все файлы, которые менялись в промежутке между 31.10.2019 и 01.11.2019 (включительно).

б) дате обращения:

find . -type f -newerat 2019-10-08

* все файлы, к которым обращались с 08.10.2019.

find . -type f -newerat 2019-10-01 ! -newerat 2019-11-01

* все файлы, к которым обращались в октябре.

в) дате создания:

find . -type f -newerct 2019-09-07

* все файлы, созданные с 07 сентября 2019 года.

find . -type f -newerct 2019-09-07 ! -newerct “2019-09-09 07:50:00”

* файлы, созданные с 07.09.2019 00:00:00 по 09.09.2019 07:50

Искать в текущей директории и всех ее подпапках только файлы:

* f — искать только файлы.

Поиск по правам доступа

Ищем все справами на чтение и запись:

find / -perm 0666

Находим файлы, доступ к которым имеет только владелец:

find / -perm 0600

Поиск файла по содержимому

find / -type f -exec grep -i -H “content” ;

* в данном примере выполнен рекурсивный поиск всех файлов в директории и выведен список тех, в которых содержиться строка content.

С сортировкой по дате модификации

find /data -type f -printf ‘%TY-%Tm-%Td %TT %pn’ | sort -r

* команда найдет все файлы в каталоге /data, добавит к имени дату модификации и отсортирует данные по имени. В итоге получам, что файлы будут идти в порядке их изменения.

Лимит на количество выводимых результатов

Самый распространенный пример — вывести один файл, который последний раз был модифицирован. Берем пример с сортировкой и добавляем следующее:

find /data -type f -printf ‘%TY-%Tm-%Td %TT %pn’ | sort -r | head -n 1

Поиск с действием (exec)

Найти только файлы, которые начинаются на sess_ и удалить их:

find . -name “sess_*” -type f -print -exec rm ;

* -print использовать не обязательно, но он покажет все, что будет удаляться, поэтому данную опцию удобно использовать, когда команда выполняется вручную.

Переименовать найденные файлы:

find . -name “sess_*” -type f -exec mv new_name ;

find . -name “sess_*” -type f | xargs -I ‘‘ mv new_name

Вывести на экран количество найденных файлов и папок, которые заканчиваются на .tmp:

find . -name “*.tmp” | wc -l

find /home/user/* -type d -exec chmod 2700 ;

* в данном примере мы ищем все каталоги (type d) в директории /home/user и ставим для них права 2700.

Сделать новые строки после слов, начинающиеся с больших букв.

Искать слова с больших букв мы уже умеем, осталось разобраться с заменой.
Нам здесь понадобится возможность заменять изначальный текст на как-либо измененный.
Итак, заменяем <*> (здесь мы ищем слова, начинающиеся с больших букв)
на \&^13.

В данном случае выражение \& означает «искомый текст» — то выражение, которое
вы нашли. А ^13 — это просто знак новой строки.

Но есть еще один способ сделать эту замену, опишем его сейчас, поскольку более
сложные варианты этого метода нам потребуются ниже.
Замените (<*>) на \1^13. Результат будет тот же самый.

Поясню, как это работает. Выражение в поиске может содержать несколько наборов круглых скобок,
в данном случае один. Сами круглые скобки никак не влияют на поиск, ищет Word то же выражение,
как если бы этих скобок не было. А вот все, что находится в скобках, нумеруется.
В данном случае у нас есть только одно выражение в скобках, и оно совпадает с искомым текстом.
Поэтому оно нумеруется при помощи последовательности \1.

Простой пример использования команды find

Для начала рассмотрим простой пример использования команды find для поиска на компьютере файлов с именем config. Мы будем искать файлы config, начиная с корневого каталога . Для этого вам нужно выполнять команду от имени пользователя root, чтобы иметь достаточно прав доступа, иначе получите сообщения «Permission denied». Итак, выполним команду:

Команда означает следующее: искать файлы с именем config (-name config), начиная с каталога (первый параметр команды find) и выводить имена файлов на экран (аргумент -print). Отмечу, что поиск рекурсивный, то есть при поиске просматриваются все вложенные директории. Как видите все просто. Теперь рассмотрим синтаксис команды и перейдем к обзору ее основных аргументов.

Общий синтаксис

find <где искать> <опции>

<где искать> — путь к корневому каталогу, откуда начинать поиск. Например, find /home/user — искать в соответствующем каталоге. Для текущего каталога нужно использовать точку «.».

<опции> — набор правил, по которым выполнять поиск.

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

Описание опций

Опция Описание
-name Поиск по имени.
-iname Регистронезависимый поиск по имени.
-type

Тип объекта поиска. Возможные варианты:

  • f — файл;
  • d — каталог;
  • l — ссылка;
  • p — pipe;
  • s — сокет.
-size Размер объекта. Задается в блоках по 512 байт или просто в байтах (с символом «c»).
-mtime Время изменения файла. Указывается в днях.
-mmin Время изменения в минутах.
-atime Время последнего обращения к объекту в днях.
-amin Время последнего обращения в минутах.
-ctime Последнее изменение владельца или прав на объект в днях.
-cmin Последнее изменение владельца или прав в минутах.
-user Поиск по владельцу.
-group По группе.
-perm С определенными правами доступа.
-depth Поиск должен начаться не с корня, а с самого глубоко вложенного каталога.
-maxdepth Максимальная глубина поиска по каталогам. -maxdepth 0 — поиск только в текущем каталоге. По умолчанию, поиск рекурсивный.
-prune Исключение перечисленных каталогов.
-mount Не переходить в другие файловые системы.
-regex По имени с регулярным выражением.
-regextype <тип> Тип регулярного выражения.
-L или -follow Показывает содержимое символьных ссылок (симлинк).
-empty Искать пустые каталоги.
-delete Удалить найденное.
-ls Вывод как ls -dgils
-print Показать найденное.
-print0 Путь к найденным объектам.
-exec <команда> {} \; Выполнить команду над найденным.
-ok Выдать запрос перед выполнением -exec.

Также доступны логические операторы:

Оператор Описание
-a Логическое И. Объединяем несколько критериев поиска.
-o Логическое ИЛИ. Позволяем команде find выполнить поиск на основе одного из критериев поиска.
-not или ! Логическое НЕ. Инвертирует критерий поиска.

Полный набор актуальных опций можно получить командой man find.

§ 54. Кавычки при цитатах

§ 54.1

Цитаты заключаются в кавычки. Если цитата оформляется как прямая речь, т. е. сопровождается словами автора, приводящего ее, то применяются соответствующие правила пунктуации (см. § 47 — 50):

Белинский писал:  «Создаёт человека природа, но развивает и образует его общество»;

«Двенадцать миллионов людей вне закона!.. Ужас!»  — писал в своём дневнике А. И. Герцен, имея в виду крепостных крестьян в тогдашней России;

«Первоэлементом литературы, — указывал М. Горький, — является язык, основное орудие её и — вместе с фактами, явлениями жизни — материал литературы»;

Докладчик привёл слова М. В. Ломоносова: «России могущество будет прирастать Сибирью» — и этим закончил своё выступление.

§ 54.2

Если после стихотворной цитаты текст продолжается, то тире ставится в конце стихотворной строки: Муж Татьяны, так прекрасно и так полно с головы до ног охарактеризованный поэтом этими двумя стихами:

…И всех выше
И нос и плечи поднимал
Вошедший с нею генерал, —

муж Татьяны представляет ей Онегина, как своего родственника и друга (Бел.) — слова муж Татьяны повторяются для того, чтобы связать вторую часть авторских слов с первой частью (ср. § 40, п. 2).

§ 54.3

Если цитата состоит из нескольких абзацев, то кавычки ставят только в начале и в конце всего текста:

В статье «Из истории русской литературы» М. Горький писал:

«Чем же сильна литература?

Насыщая идеи плотью и кровью, она даёт им большую наглядность, большую убедительность, чем философия или наука».

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

§ 54.4

Если, приводя цитату, автор или редактор (издатель) подчеркивает в ней отдельные слова (такие места выделяются особым шрифтом), то это оговаривается в примечании, заключаемом в скобки, с указанием инициалов автора или сокращения Ред., перед которыми ставятся точка и тире:  (подчёркнуто нами. — А.Б.), (курсив наш. — А.Б.), (разрядка наша. —  Ред. ). Такое примечание помещается или непосредственно после соответствующего места в цитате, или в конце предложения либо цитаты в целом, или в виде сноски (в последнем случае примечание дается без скобок).

§ 54.5

Если автор или редактор вставляет в цитату свой текст, поясняющий предложение либо отдельные слова цитаты, то этот текст помещают в прямых или угловых скобках; инициалы автора, а также слово Ред. в этом случае не ставят:Н. С. Щукин вспоминал об А. П. Чехове: «Чтобы стать настоящим писателем, — учил он  <А.П. Чехов>,  — надо посвятить себя исключительно этому делу».

Примеры использования

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

1. Поиск всех файлов

Показать все файлы в текущей директории:

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

2. Поиск файлов в определенной папке

Показать все файлы в указанной директории:

Искать файлы по имени в текущей папке:

Поиск по имени в текущей папке:

Не учитывать регистр при поиске по имени:

5. Несколько критериев

Поиск командой find в Linux по нескольким критериям, с оператором исключения:

Найдет все файлы, начинающиеся на test, но без расширения php. А теперь рассмотрим оператор ИЛИ:

Эта команда найдёт как php, так и html файлы.

6. Тип файла

По умолчанию find ищет как каталоги, так и файлы. Если вам необходимо найти только каталоги используйте критерий type с параметром d. Например:

Для поиска только файлов необходимо использовать параметр f:

Найти скрытые файлы только в текущей папке. Имена скрытых файлов в Linux начинаются с точки:

8. Поиск по разрешениям

Найти файлы с определенной маской прав, например, 0664:

Права также можно задавать буквами для u (user) g (group) и o (other). Например, для того чтобы найти все файлы с установленным флагом Suid в каталоге /usr выполните:

Поиск файлов доступных владельцу только для чтения только в каталоге /etc:

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

Найти все файлы, принадлежащие пользователю:

Поиск файлов в Linux принадлежащих группе:

10. Поиск по дате модификации

Поиск файлов по дате в Linux осуществляется с помощью параметра mtime. Найти все файлы модифицированные 50 дней назад:

Поиск файлов в Linux открытых N дней назад:

Найти все файлы, модифицированные между 50 и 100 дней назад:

Найти файлы измененные в течении часа:

Найти все файлы размером 50 мегабайт:

От пятидесяти до ста мегабайт:

Найти самые маленькие файлы:

Самые большие:

13. Действия с найденными файлами

Для выполнения произвольных команд для найденных файлов используется опция -exec. Например, для того чтобы найти все пустые папки и файлы, а затем выполнить ls для получения подробной информации о каждом файле используйте:

Удалить все текстовые файлы в tmp

Удалить все файлы больше 100 мегабайт:

Поиск больших файлов и директорий командой du

Команда du используется для вывода размеров файлов и директорий в Linux. Ее можно использовать для поиска больших файлов и директорий. Для этого выполняется команда du и результат сортируется по размеру. Таким образом можно увидеть, кто занимает больше всего места на диске.

Найдем пять самых больших файлов и директорий:

  • Символ . указывает путь и означает текущую директорию. Для поиска в другой директории укажите вместо точки ее путь.
  • Опции -ahx означают: a — искать и файлы и директории; h — выводить информацию в удобно-читаемом формате; x — не выполнять поиск на других файловых системах.
  • sort -rh выполняет сортировку результата.
  • head −5 выводит только пять первых результатов.

8.5. Многоточие как знак пропуска текста в цитате

8.5.1. Замена многоточием других знаков препинания

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

В источнике: Правильно в цитате:
А поэзия, прости господи, должна бытьглуповата. «А поэзия… должна быть глуповата», —писал Пушкин.
Неправильно в цитате:
«А поэзия…, должна быть…»;«А поэзия.., должна быть…»;«А поэзия,., должна быть…»

8.5.2. Сочетание многоточия с другими знаками препинания

Многоточие может сочетаться с такими знаками препинания, как точка, точка с запятой, восклицательный и вопросительный знаки, многоточие, в следующих случаях:

1. Точку с запятой ставят после многоточия, когда в тексте приводится перечень цитат, выделенных не кавычками, а каким-либо шрифтовым или нешрифтовым способом, с опущенными в конце каждой словами или с опущенными начальными словами (сочетаются многоточие цитат и точка с запятой авт. текста, в который цитаты включены). Напр.:

Не обособляются определения при личном местоимении, если определение по смыслу связано не только с подлежащим, но и со сказуемым, например: Он выходит из задних комнат уже окончательно расстроенный…; Я прихожу к вечеру усталый, голодный.Граф Илья Андреевич… в конце января с Наташей и Соней приехал в Москву, …Пришел Разметнов с Демкой Ушаковым.

2. Точку, восклицательный или вопросительный знак, многоточие ставят перед многоточием с отбивкой от него, когда одно предложение цитаты приводится полностью (оно и заканчивается одним из перечисленных в начале пункта знаков), а начальные слова следующего предложения цитаты опущены. Это позволяет читателю получить точное представление о структуре цитируемого текста. Напр.:

В источнике: В цитате:
Мы вышли из сакли. Вопреки предсказанию моего спутника, погода прояснилась…

«Мы вышли из сакли. …Погода прояснилась…»

«Мы вышли… …Погода прояснилась…»

8.5.3. Многоточие в начале и в конце абзацев многоабзацной цитаты

Если в конце абзаца многоабзацной цитаты опущены слова, такой абзац заканчивается многоточием, а если при этом в начале следующего абзаца опущены слова (первое слово), то он начинается многоточием. Структура текста цитаты не меняется: она делится на абзацы так же, как в источнике. Напр.:

Первый абзац цитаты с опущенными в конце словами…

…Второй абзац цитаты с опущенным начальным словом или начальными словами.

8.5.4. Многоточие в угловых скобках

Такое многоточие, заменяющее текст из одного или нескольких предложений, опущенный при цитировании:

1. Сочетается с точкой, если предшествующее предложение цитаты приводится целиком, и с многоточием, если в конце предшествующего предложения цитаты или начале последующего предложения опущены слова. Напр.:

Полное предложение цитаты. <…> Полное предложение цитаты.

Предложение цитаты с опущенными в конце словами (последним словом)… <…> …Предложение цитаты с опущенными начальными словами (первым словом).

2. Выделяется в самостоятельный абзац, если им заменяется абзац между абзацами цитируемого текста. Напр.:

Первый абзац цитируемого текста.

<…>

Третий абзац цитируемого текста.

3. Ставится в начале и (или) конце абзаца цитируемого текста, если опущены предложения в начале и (или) конце этого абзаца. Напр.:

Первый абзац цитируемого текста.

<…> Второй абзац цитируемого текста с опущенным начальным и конечным предложением. <…>

Третий абзац цитируемого текста.

8.5.5. Слитное и раздельное написание многоточия с текстом

Оно подчиняется следующим правилам:

1. Многоточие в начале фразы пишется слитно с последующим словом. Напр.:

Мы вышли из сакли. …Погода прояснилась…

2. Многоточие в середине и конце фразы пишется слитно с предшествующим словом. Напр.:

Мы вышли… Вопреки предсказанию моего спутника, погода прояснилась…

В обоих случаях (п. 1 и 2), если в машинописном оригинале многоточие напечатано с пробелом перед текстом или после него, следует пометить его корректурным знаком «уничтожить пробел».

3. Многоточие в угловых скобках рекомендуется набирать с отбивкой от предшествующего и последующего текста. Напр.:

Цитата. <…> Цитата… <…> Цитата.

§ 55. Многоточие при цитатах

§ 55.1

Если цитата приводится не полностью, то пропуск обозначается многоточием, которое ставится:

1) перед цитатой (после открывающих кавычек), синтаксически не связанной с авторским текстом, для указания, что цитата приводится не с начала предложения: Л. Н. Толстой писал: «…в искусстве простота, краткость и ясность есть высшее совершенство формы искусства»;

2) в середине цитаты, когда пропущена часть текста внутри нее: Говоря о достоинствах языка народной поэзии, А. А. Фадеев напомнил: «Не случайно наши русские классики… рекомендовали читать сказки, прислушиваться к народной речи, изучать пословицы, читать писателей, которые обладают всем богатством русской речи»;

3) после цитаты (перед закрывающими кавычками), когда цитируемое предложение приводится не до конца: Выступая в защиту культуры устной речи, А. П. Чехов писал: «В сущности ведь для интеллигентного человека дурно говорить должно бы считаться таким же неприличием, как не уметь читать и писать…»

§ 55.2

После цитаты, заканчивающейся многоточием, ставится точка, если цитата не является самостоятельным предложением: М. В. Ломоносов писал, что «красота, великолепие, сила и богатство российского языка явствует довольно из книг, в прошлые века писанных…».

Если же цитата, заканчивающаяся многоточием, является самостоятельным предложением, то после кавычек точка не ставится (как при прямой речи; см. § 47, п. 5): В. Г. Белинский писал: «В „Онегине“ все части органически сочленены…»

Примеры использования find

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

1. Простой поиск по имени:

find / -name «file.txt»

* в данном примере будет выполнен поиск файла с именем file.txt по всей файловой системе, начинающейся с корня .

2. Поиск файла по части имени:

find / -name «*.tmp»

* данной командой будет выполнен поиск всех папок или файлов в корневой директории /, заканчивающихся на .tmp

3. Несколько условий. 

а) Логическое И. Например, файлы, которые начинаются на sess_ и заканчиваются на cd:

find . -name «sess_*» -a -name «*cd»

б) Логическое ИЛИ. Например, файлы, которые начинаются на sess_ или заканчиваются на cd:

find . -name «sess_*» -o -name «*cd»

в) Более компактный вид имеют регулярные выражения, например:

find . -regex ‘.*/\(sess_.*cd\)’

find . -regex ‘.*/\(sess_.*\|.*cd\)’

* где в первом поиске применяется выражение, аналогичное примеру а), а во втором — б).

4. Найти все файлы, кроме .log:

find . ! -name «*.log»

* в данном примере мы воспользовались логическим оператором !.

Поиск по дате

1. Поиск файлов, которые менялись определенное количество дней назад:

find . -type f -mtime +60

* данная команда найдет файлы, которые менялись более 60 дней назад.

2. Поиск файлов с помощью newer. Данная опция доступна с версии 4.3.3 (посмотреть можно командой find —version).

а) дате изменения:

find . -type f -newermt «2019-11-02 00:00»

* покажет все файлы, которые менялись, начиная с 02.11.2019 00:00.

find . -type f -newermt 2019-10-31 ! -newermt 2019-11-02

* найдет все файлы, которые менялись в промежутке между 31.10.2019 и 01.11.2019 (включительно).

б) дате обращения:

find . -type f -newerat 2019-10-08

* все файлы, к которым обращались с 08.10.2019.

find . -type f -newerat 2019-10-01 ! -newerat 2019-11-01

* все файлы, к которым обращались в октябре.

в) дате создания:

find . -type f -newerct 2019-09-07

* все файлы, созданные с 07 сентября 2019 года.

find . -type f -newerct 2019-09-07 ! -newerct «2019-09-09 07:50:00»

* файлы, созданные с 07.09.2019 00:00:00 по 09.09.2019 07:50

Искать в текущей директории и всех ее подпапках только файлы:

find . -type f

* f — искать только файлы.

Поиск по правам доступа

1. Ищем все справами на чтение и запись:

find / -perm 0666

2. Находим файлы, доступ к которым имеет только владелец:

find / -perm 0600

Поиск файла по содержимому

find / -type f -exec grep -i -H «content» {} \;

* в данном примере выполнен рекурсивный поиск всех файлов в директории и выведен список тех, в которых содержится строка content.

С сортировкой по дате модификации

find /data -type f -printf ‘%TY-%Tm-%Td %TT %p\n’ | sort -r

* команда найдет все файлы в каталоге /data, добавит к имени дату модификации и отсортирует данные по имени. В итоге получаем, что файлы будут идти в порядке их изменения.

Лимит на количество выводимых результатов

Самый распространенный пример — вывести один файл, который последний раз был модифицирован. Берем пример с сортировкой и добавляем следующее:

find /data -type f -printf ‘%TY-%Tm-%Td %TT %p\n’ | sort -r | head -n 1

Поиск с действием (exec)

1. Найти только файлы, которые начинаются на sess_ и удалить их:

find . -name «sess_*» -type f -print -exec rm {} \;

* -print использовать не обязательно, но он покажет все, что будет удаляться, поэтому данную опцию удобно использовать, когда команда выполняется вручную.

2. Переименовать найденные файлы:

find . -name «sess_*» -type f -exec mv {} new_name \;

или:

find . -name «sess_*» -type f | xargs -I ‘{}’ mv {} new_name

3. Вывести на экран количество найденных файлов и папок, которые заканчиваются на .tmp:

find . -name «*.tmp» | wc -l

4. Изменить права:

find /home/user/* -type d -exec chmod 2700 {} \;

* в данном примере мы ищем все каталоги (type d) в директории /home/user и ставим для них права 2700.

5. Передать найденные файлы конвееру (pipe):

find /etc -name ‘*.conf’ -follow -type f -exec cat {} \; | grep ‘test’

* в данном примере мы использовали find для поиска строки test в файлах, которые находятся в каталоге /etc, и название которых заканчивается на .conf. Для этого мы передали список найденных файлов команде grep, которая уже и выполнила поиск по содержимому данных файлов.

6. Произвести замену в файлах с помощью команды sed:

find /opt/project -type f -exec sed -i -e «s/test/production/g» {} \;

* находим все файлы в каталоге /opt/project и меняем их содержимое с test на production.

8.9. Знаки препинания в фразе со словами цитирующего внутри цитаты

8.9.1. На месте разрыва цитаты — запятая, точка с запятой, двоеточие, тире

В этом случае, а также при отсутствии знаков препинания на месте разрыва слова цитирующего отделяют от текста цитаты с обеих сторон запятой и тире (, —). Напр.:

В источнике: В издании с цитатой:
Я стал неспособен к благородным порывам… «Я, — признается Печорин, — стал неспособен к благородным порывам…»

…Мое сердце превращается в камень, и ничто его не разогреет снова.

М. Лермонтов. Герой нашего времени

«…Мое сердце превращается в камень, — безнадежно заключает Печорин, — и ничто его не разогреет снова».

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

Д. Хармс

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

Цель всякой человеческой жизни одна: бессмертие.

Д. Хармс

«Цель всякой человеческой жизни одна, — записывает в своем дневнике Д. Хармс, — бессмертие».

Подлинный интерес — это главное в нашей жизни.

Д. Хармс

«Подлинный интерес, — утверждает Д. Хармс, — это главное в нашей жизни».

8.9.2. На месте разрыва цитаты — точка

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

В источнике: В издании с цитатой:
…Мое сердце превращается в камень, и ничто его не разогреет снова. Я готов на все жертвы, кроме этой… «…Мое сердце превращается в камень, и ничто его не разогреет снова, — заключает Печорин. — Я готов на все жертвы, кроме этой…»

8.9.3. На месте разрыва цитаты — вопросительный или восклицательный знак

В этом случае перед словами цитирующего оставляют вопросительный или восклицательный знак и тире (? —; ! —), а после слов цитирующего ставят точку и тире (. —), начиная вторую часть цитаты с прописной буквы, или запятую и тире (, —), начиная вторую часть цитаты со строчной буквы, если в источнике текст после вопросительного (восклицательного) знака начинается со строчной буквы. Напр.:

В источнике: В издании с цитатой:

Я иногда себя презираю… не оттого ли я презираю и других?.. Я стал неспособен к благородным порывам; я боюсь показаться смешным самому себе.

…Прости любовь! мое сердце превращается в камень, и ничто его не разогреет снова.

«Я иногда себя презираю… не оттого ли я презираю и других?.. — признается Печорин. — Я стал неспособен к благородным порывам…»

«…Прости любовь! — пишет Печорин в своем журнале, — мое сердце превращается в камень…»

8.9.4. На месте разрыва цитаты — многоточие

В этом случае перед словами цитирующего ставят многоточие и тире (… —), а после слов цитирующего — запятую и тире (, —), если в источнике текст после многоточия начинался со строчной буквы, и точку и тире (. —), если в источнике текст после многоточия начинался с прописной буквы. Напр.:

В источнике: В издании с цитатой:
Я иногда себя презираю… не оттого ли я презираю и других?.. «Я иногда себя презираю… — признается Печорин, — не оттого ли я презираю и других?..»
Это какой-то врожденный страх, неизъяснимое предчувствие… Ведь есть люди, которые безотчетно боятся пауков, тараканов, мышей… «Это какой-то врожденный страх, неизъяснимое предчувствие… — ищет объяснения Печорин, — Ведь есть люди, которые безотчетно боятся пауков, тараканов, мышей…»

Рекурсивно получить список всех файлов и папок

Этот пример рекурсивного поиска файлов и папок не прервется в случае ошибки, а продолжится дальше. Вместо массива здесь используется List для записи списка файлов и папок.

List<string> ls = GetRecursFiles(PathToFolder);
foreach (string fname in ls)
{
    MessageBox.Show(fname);
}

private List<string> GetRecursFiles(string start_path)
{
    List<string> ls = new List<string>();
    try
    {
        string[] folders = Directory.GetDirectories(start_path);
        foreach (string folder in folders)
        {
            ls.Add("Папка: " + folder);
            ls.AddRange(GetRecursFiles(folder));
        }
        string[] files = Directory.GetFiles(start_path);
        foreach (string filename in files)
        {
            ls.Add("Файл: " + filename);
        }
    }
    catch (System.Exception e)
    {
        MessageBox.Show(e.Message);
    }
    return ls;
}

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

Получить список папок в папке

Для получения списка папок можно воспользоваться методом GetDirectories.

Пример поиска папок с помощью GetDirectories:

string[] allfolders = Directory.GetDirectories(PathToFolder);
foreach (string folder in allfolders)
{
    Console.WriteLine(folder);
}

Метод GetDirectories может принимать 3 параметра, из которых первый обязательный:

GetDirectories(String path, String pattern, SearchOption options)

path — путь к папке, в которой ищем файлы;

pattern — шаблон поиска файлов (например, *.txt или ??abc.doc);

options — способ поиска, указывающий нужно искать только в текущей папке (SearchOption.TopDirectoryOnly) или во вложенных тоже (SearchOption.AllDirectories).

По аналогии с поиском файлов, есть метод EnumerateDirectories, который позволяет обрабатывать список папок не дожидаясь его полного получения (доступен в .NET Framework 4.0 и выше).

Метод EnumerateDirectories аналогично GetDirectories принимает 3 параметра:

path — путь к папке, в которой ищем файлы;

pattern — шаблон поиска файлов;

options — способ поиска.

Пример поиска папок с помощью EnumerateDirectories:

IEnumerable allfolders = Directory.EnumerateDirectories(PathToFolder);
foreach (string folder in allfolders)
{
    Console.WriteLine(folder);
}

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

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: