Найдите файлы в пути

Я хочу искать определенный тип файла (.jpeg) в данном пути очень эффективный способ.

У меня в настоящее время есть 2 опции

  1. ls- R | grep .jpeg
  2. использовать 'find'

какой является лучшим? есть ли какой-либо лучший подход затем это?

1
задан 15.12.2009, 13:43

9 ответов

Я использовал бы find /somewhere/on/disk -name "*.jpeg" ls.

Существует также locate *.jpeg опция, которая использует базу данных. Однако эта база данных только обновляется равномерно (обычно от a cron задание), таким образом, некоторый файл еще, возможно, не был индексирован в то время, когда Вы вызываете locate команда, следовательно приводящая к менее точному результату. Можно вызвать создание или обновление этой базы данных путем вызова updatedb команда.

О нас find по сравнению с ls производительность, ls отсортирует вывод, который занимает время, в то время как Вам не обязательно нужен он. Кроме того, ls произведет большую информацию, которая должна быть фильтрована grep впоследствии.

Ссылка:

6
ответ дан 12.12.2019, 07:39

Я всегда был поклонником находки, существует так, можно сделать с нею:

find /starting/path -type f -name "*.jpeg"

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

find /home/john -type f -name "*.jpeg"

Можно хотеть искать .jpg и .jpeg (3 расширения буквы со дней DOS), как файлы можно назвать так или иначе:

find . -type f \( -name "*.jpg" -o -name "*.jpeg" \)
3
ответ дан 12.12.2019, 07:39

Зависит от того, что Вы хотите в результате. ls -R не скажет Вам, какой каталог это нашло файлом в, в то время как find будет.

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

2
ответ дан 12.12.2019, 07:39

Я обычно использую

      find . -name *.jpg -print {} \;
1
ответ дан 12.12.2019, 07:39

Вы могли бы также хотеть соответствовать файлам в.JPG и.JPEG в прописных буквах. С находкой Вы могли добавить -name '*.JPG' -name '*.JPEG', или Вы могли передать по каналу, находят к grep (да, это немного ужасно):

find . -type f | grep "\.[Jj][Pp][Ee]\?[Gg]$"

Это будет соответствовать:

  • foo.jpg
  • bar.jpeg
  • foo.JPG
  • панель. JPEG
1
ответ дан 12.12.2019, 07:39

find ./ -name *.jpg -print

1
ответ дан 12.12.2019, 07:39

Установка "располагается" или "slocate"

Выполненные "updatedb" и "определяют местоположение \*.jpeg"

updatedb создает индексную базу данных для имен файлов в Вашей системе.

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

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

Это отчасти похоже на Поиск Google Desktop, но только для поиска имени файла.

0
ответ дан 12.12.2019, 07:39

Находка является определенно лучшим инструментом для этого задания.
Вывод ls-R будет трудно проанализировать (имена файлов чередованы с именами каталогов). Кроме того, с ls у Вас будет трудное время, имея дело с именами с пробелами, пока находят. - называют '*.jpeg'-print0, генерирует список, разделенный нулевыми символами. у xargs, grep и других есть опция считать этот вид входа. Это означает, что все странные имена сохраняются.

0
ответ дан 12.12.2019, 07:39

Кроме заметного отличия для канала, обе версии могут рассматриваться как равные. Реализация (ls.c по сравнению с find.c, взятым от busybox), смотрит вполне то же при поиске файлов. Можно также сократить первый:

ls -R *.jpeg
0
ответ дан 12.12.2019, 07:39

Теги

Похожие вопросы