Как удалить все файлы определенного расширения
Перейти к содержимому

Как удалить все файлы определенного расширения

  • автор:

Как удалить все файлы определенного расширения

Сообщения: 681
Благодарности: 314

Конфигурация компьютера
Процессор: AMD Ryzen 5 1600
Материнская плата: GIGABYTE B450M DS3H
Память: Kingston ValueRAM [KVR24N17S8/8] 8 ГБ
HDD: KINGSTON SV300S37A120G ATA 120ГБт SSD; SAMSUNG HD501LJ, SATA, 500ГБт; ST2000VM003-1CT164 ATA Device 2ТБт
Видеокарта: GIGABYTE Radeon R7 250 1100Mhz PCI-E 3.0 2048Mb 1800Mhz 128 bit DVI HDMI HDCP
Звук: Realtek ALC887
Блок питания: CoolerMaster MasterWatt Lite 600W, 2019
Монитор: Samsung SyncMaster 2443, 24»
ОС: Windows 10 Pro 64Bit

Папуас, обычный Total commander.

Самых очевидных путей решения 2 —
Вариант 1:
1. Заходим в вашу «корневую» папку
2. жмем alt+f7, в строке поиска вводим «|*.bmp» без кавычек (значок «|» рядом с клавишей backspace, он говорит о том, что ищем «все, кроме»)
3. жмем «поиск», после окончания поиска — кнопку «файлы на панель»
4. выделяем желаемые файлы, удаляем (видимо подпапки он тоже выведет, их удалять не следует)

вариант 2 (для раскладки тотала от Samlab):ь
1. Заходим в вашу «корневую» папку
2. Жмем ctrl+b — на панель выводятся все файлы из подпапок
3. Дальше жмем ctrl+f12, вводим «|*.bmp», жмем ок (остаются видимыми только файлы, с расширением не bmp), жмем «*» — все файлы выделяются, жмем «delete»
4 Либо вместо пункта 3 жмем на дополнительной клавиатуре клавишу «+» — вводим «|*.bmp» жмем «ок» — выделяются все не бмп-шные файлы.

Имхо вариант 2 более востребован, но тут вопрос личных предпочтений.

Это сообщение посчитали полезным следующие участники:

Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Сообщения: 46
Благодарности: 0

Сегодня обязательно проверю. Больше спасибо!

Сообщения: 46
Благодарности: 0

Боже, как все просто и удобно Зря я не любил пользоваться сторонними файловыми менеджерами. Еще раз благодарю!)

Сообщения: 681
Благодарности: 314

Конфигурация компьютера
Процессор: AMD Ryzen 5 1600
Материнская плата: GIGABYTE B450M DS3H
Память: Kingston ValueRAM [KVR24N17S8/8] 8 ГБ
HDD: KINGSTON SV300S37A120G ATA 120ГБт SSD; SAMSUNG HD501LJ, SATA, 500ГБт; ST2000VM003-1CT164 ATA Device 2ТБт
Видеокарта: GIGABYTE Radeon R7 250 1100Mhz PCI-E 3.0 2048Mb 1800Mhz 128 bit DVI HDMI HDCP
Звук: Realtek ALC887
Блок питания: CoolerMaster MasterWatt Lite 600W, 2019
Монитор: Samsung SyncMaster 2443, 24»
ОС: Windows 10 Pro 64Bit

Не стоит благодарности )))
Могу посоветовать использовать сборки Тотала с сайта samlab.ws — там очень грамотно настроены сочетания горячих клавиш. В настоящее время сборки не содержат вареза и насколько мне известно, являются легальными.

Сообщения: 27449
Благодарности: 8086

Цитата a_axe:

В настоящее время сборки не содержат вареза и насколько мне известно, являются легальными. »

a_axe, а сам Total Commander, значится, стал бесплатным?

Перейти в папку. Нажать «Alt-F7» — поиск файла. Маска файлов: «*.*|*.bmp». «Alt-А» — снять флажок «[ ] Искать папки»:

╔════════════════════════════ Поиск файла ═════════════════════════════╗ ║ Одна или несколько масок файлов: ║ ║ *.*|*.bmp ↓║ ╟──────────────────────────────────────────────────────────────────────╢ ║ Содержащих текст: ║ ║ ↓║ ║ Используя кодовую страницу: ║ ║ Все кодовые страницы ↓║ ╟──────────────────────────────────┬───────────────────────────────────╢ ║ [ ] Учитывать регистр │ [ ] Искать в архивах ║ ║ [ ] Только целые слова │ [ ] Искать папки ║ ║ [ ] Искать 16-ричный код │ [ ] Искать в символических ссылках║ ╟──────────────────────────────────┴───────────────────────────────────╢ ║ Выберите область поиска: ║ ║ С текущей папки ↓ [ ] Использовать фильтр ║ ╟──────────────────────────────────────────────────────────────────────╢ ║ < Искать >[ Диск ] [ Фильтр ] [ Дополнительно ] [ Отмена ] ║ ╚══════════════════════════════════════════════════════════════════════╝

«Ctrl-Enter» — начать поиск. По завершении — нажать «Alt-л» или кнопку «Панель» для помещения найденных файлов на Временную панель:

╔═══════════════════ Временная панель [2] ═════╤════════╤═19:48 ║и Имя │Размер│ Дата │Время║ ║⌂.. │ Вверх│ │ ▲ ║ --mozilla-.xml │ 1489│03.09.09│17:06▓ ║ %%__Menu.reg │ 3252│05.11.10│02:13░ ║ %%__RestoreCmdLine │ 584│19.10.10│01:30░ ║ %%__RestoreCmdLine │ 584│19.10.10│01:30░ ║ %%__SaveCmdLine │ 648│19.10.10│01:30░ ║ %%__SaveCmdLine │ 648│19.10.10│01:30░ ║ .autoreg │ 1│25.11.10│22:41░ ║ .autoreg │ 1│14.02.11│00:49░ ║►_custombb.js │ 41522│22.03.08│23:48░ ║ _preview.html │ 12130│28.11.07│02:10░ ║ _preview.xul │ 7479│15.02.08│23:24░ ║►~firstrun.js │ 3905│23.03.08│01:38░ ║ 0000.hta │ 5826│18.06.07│00:55░ ║ 0000-2.hta │ 5883│23.11.10│09:01░ ║ 0001.ahk │ 62585│11.01.11│02:23░ ║ 0001.au3 │ 1333│17.03.11│17:27░ ║ 0001.au3 │ 1805│24.03.11│06:46░ ║►0001.cmd │ 971│23.11.10│07:52░ ║►0001.cmd │ 295│05.12.10│21:40░ ║►0001.cmd │ 166│11.01.11│21:38░ ║►0001.cmd │ 204│20.01.11│01:51░ ║►0001.cmd │ 252│22.01.11│07:46░ ║►0001.cmd │ 94│12.02.11│21:03░ ║►0001.cmd │ 513│16.02.11│13:50░ ║►0001.cmd │ 510│16.02.11│13:15░ ║►0001.cmd │ 235│20.02.11│22:00░ ║►0001.cmd │ 152│08.03.11│16:03░ ║►0001.cmd │ 187│20.03.11│03:40░ ║►0001.cmd │ 799│02.04.11│00:57░ ║►0001.cmd │ 1665│04.04.11│04:21░ ║►0001.cmd │ 88│03.05.11│22:04▼ ╟───────────────────────────────────────┴──────┴────────┴─────╢ ║⌂.. ║ ╚═══════════ 604,048,959 (13121) ═══ 4,424,003,584 ═══════════╝

По завершении помещения найденных файлов на Временную панель нажать «*» — выделить все файлы. Далее «F8» (в Корзину), або «Shift-Del» (мимо Корзины).

Как удалить файлы определенного типа из командной строки или bat-файла

Как удалить файлы определенного типа из командной строки или bat-файла

Очень часто возникает необходимость удалить все файлы с определенным расширением в каком-либо каталоге (или в каталоге и во всех его подкаталогах). Например, если мы хотим удалить все текстовые файлы с расширением *.txt в папке (и всех ее подпапках) C:\texts , то можно выполнить следующую команду:

del /f /s /q C:\texts\*.txt

Где
/f — удаляет все файлы, даже если у них установлен атрибут только чтение
/s — удаляет файлы из всех подкаталогов (если это не требуется, то данный ключ нужно убрать)
/q — отключает запрос на подтверждение удаления файла
C:\texts — каталог, в котором будут найдены и удалены все файлы. Вместо определенной папки, можно указать весь диск целиком, тогда выглядеть это будет так: C:\*.txt
*.txt — тип файлов (расширение), которые будут удалены

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

Как в Linux удалить файл

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

Причины, почему нужно удалить файл из системы

Как в Linux удалить файл

1. Освобождение места на жестком диске. Если диск заполнен, удаление ненужных файлов может освободить место для хранения новых файлов.

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

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

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

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

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

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

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

В Linux существует множество утилит для удаления файлов с различными опциями. Например, команда «shred» удаляет файлы без возможности их восстановления, команда «wipe» удаляет файлы так, чтобы они были невосстановимыми с помощью специализированных программ, команда «srm» удаляет файлы так, чтобы они были невосстановимыми даже в лабораторных условиях.

Важно помнить, что при удалении файлов в Linux они обычно перемещаются в корзину, которая находится в специальной директории «Trash». Это позволяет восстановить файлы, если они были удалены случайно или по ошибке. Если вы хотите окончательно удалить файлы без возможности их восстановления, вы должны использовать специализированные утилиты, такие как «shred», «wipe» или «srm».

Инструкция по удалению файла из системы

В Linux для удаления файла можно использовать команду «rm». Необходимо выполнить следующие шаги:

Откройте терминал в Linux.

Введите команду «rm» и укажите путь к файлу, который нужно удалить. Например, чтобы удалить файл «file.txt», находящийся в домашней директории, нужно ввести команду «rm ~/file.txt».

Если вы хотите удалить несколько файлов, перечислите их через пробел. Например, «rm ~/file1.txt ~/file2.txt».

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

Важно знать, что удаленные файлы невозможно будет восстановить, поэтому перед удалением убедитесь, что файлы действительно больше не нужны.

Если вы попытаетесь удалить файл, на который у вас нет прав, вам будет выдано сообщение об ошибке. Чтобы удалить такой файл, вам необходимо получить права на его удаление. Например, для удаления файла, который принадлежит пользователю «root», необходимо выполнить команду «sudo rm /path/to/file».

Если вы хотите удалить каталог, а не файл, используйте команду «rm -r». Например, чтобы удалить каталог «mydirectory», находящийся в домашней директории, нужно ввести команду «rm -r ~/mydirectory». При использовании этой команды будьте осторожны, так как все файлы и подкаталоги в указанном каталоге будут удалены без подтверждения.

Если вы случайно удалили файл, необходимо использовать специальные программы для восстановления данных, такие как TestDisk, PhotoRec или Scalpel. Важно знать, что чем быстрее вы примените эти программы, тем больше вероятность восстановления данных. Поэтому в случае удаления файлов по ошибке, не записывайте на диск новые данные, чтобы не затереть старые.

Хотите удалить файл без вывода на экран подтверждения каждого удаления? Вы можете использовать команду «rm -f». Например, чтобы удалить файл «file.txt» без вывода подтверждения, введите команду «rm -f file.txt». Будьте осторожны при использовании этой команды, так как удаленные файлы будут безвозвратно утеряны.

Нужно удалить файлы с определенным расширением в текущей директории? Используйте символ звездочки (*) для указания расширения. Например, чтобы удалить все файлы с расширением «.txt» в текущей директории, введите команду «rm *.txt».

Если вы случайно удалили файл и хотите его восстановить из резервной копии, вы можете использовать команду «cp» для копирования файла из резервной копии в нужную директорию. Например, чтобы скопировать файл «file.txt» из резервной копии, находящейся в директории «/backup», в директорию пользователя, введите команду «cp /backup/file.txt ~/».

Удалить файлы с определённым расширением. Как?

Что нужно: удаление файлов с определённым расширением из директории /home.

В /home может быть множество различных папок.

Файлов с разными расширениями может быть много.

#!/bin/bash EXTENTION=("sh" "t*") declare -a A n=0 for i in "$"; do [ $n -ne 0 ] && A[n++]=-o A[n++]=-name A[n++]=*.$i done find /home -type f -a \( "$" \) -delete 

BitSum ★★
13.09.17 23:07:18 MSK

bvn13 ★★★★★
( 13.09.17 23:13:06 MSK )
Ответ на: комментарий от bvn13 13.09.17 23:13:06 MSK

Разве в find в «одну строку» можно уложиться?

BitSum ★★
( 13.09.17 23:13:41 MSK ) автор топика
Последнее исправление: BitSum 13.09.17 23:13:48 MSK (всего исправлений: 1)

Ответ на: комментарий от BitSum 13.09.17 23:13:41 MSK

bvn13 ★★★★★
( 13.09.17 23:14:09 MSK )

куча вариантов 1) на питоне напиши, расширения в кортеж, потом с помощью endswith() проверяешь файлы 2) на баше напиши 3) тупо возьми find

find ./ -type f \( -iname \*.txt -o -iname \*.iso \)

find -iregex ‘.*\.\(txt\|html\|iso\)$’

garik_keghen ★★★★★
( 13.09.17 23:14:49 MSK )
Ответ на: комментарий от BitSum 13.09.17 23:13:41 MSK

find /path/to/search -iname '*.ext' -exec rm '<>' \;

-exec позволяет выполнить команду, подставив найденное имя. ‘<>‘ — найденное имя, экранированная точка с запятой — конец блока -exec.

question4 ★★★★★
( 13.09.17 23:23:21 MSK )
Ответ на: комментарий от question4 13.09.17 23:23:21 MSK

Добавил решения в первый пост.

BitSum ★★
( 13.09.17 23:24:14 MSK ) автор топика
Ответ на: комментарий от garik_keghen 13.09.17 23:14:49 MSK

Как создать переменную для указания расширений? Иначе получится колхоз.

find ./ -type f \( -iname \*.txt -o -iname \*.iso \) 

BitSum ★★
( 13.09.17 23:28:08 MSK ) автор топика
Ответ на: комментарий от question4 13.09.17 23:23:21 MSK

у линуксового find есть сразу опция -delete

Avial ★★★★★
( 13.09.17 23:56:14 MSK )
Ответ на: комментарий от Avial 13.09.17 23:56:14 MSK

-exec универсальный 🙂 А вникать в этот ман нужно очень долго.

question4 ★★★★★
( 14.09.17 00:30:27 MSK )

Файлов с разными расширениями может быть много.

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

А раз имя файла, то к нему можно применять регулярки. Например rm *bak

anonymous
( 14.09.17 01:37:15 MSK )
Ответ на: комментарий от BitSum 13.09.17 23:28:08 MSK

find ./ -type f -iregex '.*\.\(txt\|iso\)' 

тип регулярки можно задать через -regextype, список типов получить запустив ‘find -regextype help’, но само их описание погребено в недрах info.

ABW ★★★★★
( 14.09.17 01:47:21 MSK )
Ответ на: комментарий от BitSum 13.09.17 23:28:08 MSK

Как создать переменную для указания расширений?

bash таки умеет массивы.

slamd64 ★★★★★
( 14.09.17 07:04:46 MSK )
Ответ на: комментарий от ABW 14.09.17 01:47:21 MSK

Если позанудствовать, то ТСа можно понять так, что каталоги с именами типа a.txt/ удалять наверное не надо. 🙂

vodz ★★★★★
( 14.09.17 07:36:56 MSK )
Ответ на: комментарий от vodz 14.09.17 07:36:56 MSK

Если позанудствовать . каталоги с именами типа a.txt/ удалять наверное не надо

. -type f .
Так видно лучше? Никто и не собирался ^)

bormant ★★★★★
( 14.09.17 07:40:50 MSK )
Ответ на: комментарий от bormant 14.09.17 07:40:50 MSK

А, точно, спать надо больше 🙁 Как же так. Наверное прокоментировать хотел пример выше, а взял последнее.

vodz ★★★★★
( 14.09.17 07:44:45 MSK )
Последнее исправление: vodz 14.09.17 07:47:22 MSK (всего исправлений: 1)

А что, rm -r *.*ext* не катит уже?

ozz_is_here
( 14.09.17 08:10:02 MSK )
Ответ на: комментарий от ozz_is_here 14.09.17 08:10:02 MSK

1) нерекурсивный
2) на большом количестве файлов тянет на переполнение комстроки

bormant ★★★★★
( 14.09.17 08:13:57 MSK )
Ответ на: комментарий от bormant 14.09.17 08:13:57 MSK
ozz_is_here
( 14.09.17 08:20:05 MSK )

Такой вариант ещё предложили, ну очень удобный.

unset notfirst; list='exe com bat' find /home \( $(for var in $list; do echo -n $ ; echo -n \ -iname \"\*.$var\"; notfirst=1 ;done ) \) -delete 

BitSum ★★
( 14.09.17 09:00:17 MSK ) автор топика
Ответ на: комментарий от BitSum 14.09.17 09:00:17 MSK

Такой вариант ещё предложили, ну очень удобный.

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

list='t* com bat'; for var in $list ; do echo "$var"; done 

Может выдать типа:

vodz ★★★★★
( 14.09.17 09:12:28 MSK )
Последнее исправление: vodz 14.09.17 09:13:52 MSK (всего исправлений: 3)

Ответ на: комментарий от question4 13.09.17 23:23:21 MSK

find /home -name '*.ext1' -o -name '*.ext2' -o -name '*.ext3' -type f -delete 

beastie ★★★★★
( 14.09.17 09:37:26 MSK )
Ответ на: комментарий от BitSum 13.09.17 23:28:08 MSK

колхоз, но с утра голова лучше не придумала)

#!/usr/bin/env bash EXTENTION=("exe" "msi" "txt") for i in $; do find ./ -type f -name "*.$" 2> /dev/null done 

garik_keghen ★★★★★
( 14.09.17 11:01:30 MSK )
Ответ на: комментарий от BitSum 13.09.17 23:24:14 MSK

Заодно пометь тему решенной

J ★★★★
( 14.09.17 11:08:45 MSK )
Ответ на: комментарий от garik_keghen 14.09.17 11:01:30 MSK

колхоз, но с утра голова лучше не придумала)

У вас таже самая ошибка. Уж сколько раз твердили миру, что есть специально придуманный синтаксис «$», с кавычками, прямо отдельной строкой в документации.

vodz ★★★★★
( 14.09.17 11:30:28 MSK )
Ответ на: комментарий от vodz 14.09.17 11:30:28 MSK

эм, давно не баше не писал, пардноньте, а то, что я поставил точку перед расширением не поможет?

. прогнал у себя по хомяку, нет ни одного ошибочного совпадения.
garik_keghen ★★★★★
( 14.09.17 11:39:45 MSK )
Ответ на: комментарий от garik_keghen 14.09.17 11:39:45 MSK

что я поставил точку перед расширением не поможет?

Нет, потому что маска развернется ещё в for i in *?[xyz]*
vodz ★★★★★
( 14.09.17 11:41:35 MSK )
Ответ на: комментарий от vodz 14.09.17 11:41:35 MSK

хм, спасибо, буду знать.

garik_keghen ★★★★★
( 14.09.17 11:42:33 MSK )
Ответ на: комментарий от vodz 14.09.17 11:41:35 MSK

Так в итоге, какое конечное решение будет на баше? Чтобы я протестировал и обновил первый пост.

BitSum ★★
( 14.09.17 11:54:08 MSK ) автор топика
Последнее исправление: BitSum 14.09.17 11:54:22 MSK (всего исправлений: 1)

Ответ на: комментарий от BitSum 14.09.17 11:54:08 MSK

Так вроде же понятно объяснил, надо записать «$» в двойных кавычках. Ну для топика там надо удалять дописать.

vodz ★★★★★
( 14.09.17 11:59:48 MSK )
Последнее исправление: vodz 14.09.17 12:02:48 MSK (всего исправлений: 3)

Ответ на: комментарий от BitSum 14.09.17 11:54:08 MSK

С переменными и, особенно, массивами в bash лучше не связывайся, с ними всегда больше ошибок и тормозов, типичный пример тут Удалить файлы с определённым расширением. Как? (комментарий)

legolegs ★★★★★
( 14.09.17 12:19:10 MSK )
Ответ на: комментарий от legolegs 14.09.17 12:19:10 MSK

С переменными и, особенно, массивами в bash лучше не связывайся

Смешно. Просто эталонно-гранитное «неасилил».

vodz ★★★★★
( 14.09.17 12:22:30 MSK )
Ответ на: комментарий от vodz 14.09.17 12:22:30 MSK

Я осилил. И понял, что, во-первых, оно того не стоит и почти везде лучше итерацию по пассиву заменять на пайпы, xargs и т.п. и во-вторых, новичок точно напорется на грабли с файликами с пробелами, начинающимися на минус, с длиной командной строки и т.п.

legolegs ★★★★★
( 14.09.17 12:26:13 MSK )
Ответ на: комментарий от legolegs 14.09.17 12:26:13 MSK

во-первых, оно того не стоит и почти везде лучше

Это просто бла-бла. Чтобы не выглядеть так как и вы голословным, то «всегда» на самом деле означает «там, где нет bash», что мало похоже на топик с таким тегом.

И этот поц говорит о тормозах и пробелах в именах.

vodz ★★★★★
( 14.09.17 12:31:48 MSK )

Обновил первый пост. Добавил скрипт на баше.

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

BitSum ★★
( 14.09.17 12:56:01 MSK ) автор топика
Последнее исправление: BitSum 14.09.17 12:57:50 MSK (всего исправлений: 2)

Ответ на: комментарий от vodz 14.09.17 12:31:48 MSK

Чтобы не выглядеть так как и вы голословным,

Вариант с итерацией по башевскому массиву проходит дерево столько раз, сколько ищется расширений — это может быть и 10 и 20 раз. Многократное замедление прохода по диску — это не голые слова, а суровая реальность. А через год ТС захочет решить те-же задачу тем-же способом, но забудет кавычки или поставит не те и будет удивляться, почему простой скрипт глючит.

legolegs ★★★★★
( 14.09.17 14:03:18 MSK )
Ответ на: комментарий от legolegs 14.09.17 14:03:18 MSK

Вариант с итерацией по башевскому массиву проходит дерево столько раз, сколько ищется расширений — это может быть и 10 и 20 раз.

Это вроде бы правильно, но в скриптах важно не задумыватся о работе внутри дерева интерпретатора, а их удобность. Так вот, поиск и правка хардкорного regex-а внутри скрипта у вас займёт кучу времени по сравнению со сколько комп затратит на цикл.

Хотя. если действительно считать миллисекунды, то да, надо формировать аргументы (-a -name «.$ext»)* для ровно одного вызова find. Можно было б вам защитать 1:1, но вызов несколько find-ов это на много затратнее чем дерево bash-а и потому объяснение правильно лишь случайно :))) А скрипт становится развесистым и трудным для понимания.

но забудет кавычки или поставит не те и будет удивляться

Ну на это я уже отвечал, это эталонное «ниасилил.»

vodz ★★★★★
( 14.09.17 14:14:26 MSK )
Последнее исправление: vodz 14.09.17 14:16:48 MSK (всего исправлений: 2)

Ответ на: комментарий от vodz 14.09.17 14:14:26 MSK

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

vodz ★★★★★
( 14.09.17 14:48:55 MSK )
Ответ на: комментарий от vodz 14.09.17 14:48:55 MSK

Проход по файловой системе действительно долог

Да ещё как. Если это зрелая файлопомойка на терабайт, то огого как долго можно по ней блуждать. А если оно по сети смонтировано, то всё ещё хуже. А если поиск идёт не по имени, а, например, по дате, то это вызов stat() на каждый файл.

Хотя на моём хомяке кеширование здорово помогает и разница не настолько велика, как я ожидал.

Трудночитаемость регэкспов признаю и вообще хотел бы, чтобы у find была опция -names-from-file (так-же, как grep —file=). скостылить для финда чтение паттернов из файла можно, но выглядит это ужасно.

legolegs ★★★★★
( 14.09.17 16:12:18 MSK )
Последнее исправление: legolegs 14.09.17 16:15:40 MSK (всего исправлений: 2)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *