Я хочу искать определенный тип файла (.jpeg) в данном пути очень эффективный способ.
У меня в настоящее время есть 2 опции
ls- R | grep .jpeg
'find'
какой является лучшим? есть ли какой-либо лучший подход затем это?
Я использовал бы find /somewhere/on/disk -name "*.jpeg"
ls
.
Существует также locate *.jpeg
опция, которая использует базу данных. Однако эта база данных только обновляется равномерно (обычно от a cron
задание), таким образом, некоторый файл еще, возможно, не был индексирован в то время, когда Вы вызываете locate
команда, следовательно приводящая к менее точному результату. Можно вызвать создание или обновление этой базы данных путем вызова updatedb
команда.
О нас find
по сравнению с ls
производительность, ls
отсортирует вывод, который занимает время, в то время как Вам не обязательно нужен он. Кроме того, ls
произведет большую информацию, которая должна быть фильтрована grep
впоследствии.
Ссылка:
Я всегда был поклонником находки, существует так, можно сделать с нею:
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" \)
Зависит от того, что Вы хотите в результате. ls -R
не скажет Вам, какой каталог это нашло файлом в, в то время как find
будет.
Кроме того, ls-R генерирует более вывод, который впоследствии фильтрован, в то время как find
поиски специально для того, что Вы хотели. Не сделав измерения, я предположил бы это find
обычно более эффективно.
Вы могли бы также хотеть соответствовать файлам в.JPG и.JPEG в прописных буквах. С находкой Вы могли добавить -name '*.JPG' -name '*.JPEG'
, или Вы могли передать по каналу, находят к grep (да, это немного ужасно):
find . -type f | grep "\.[Jj][Pp][Ee]\?[Gg]$"
Это будет соответствовать:
Установка "располагается" или "slocate"
Выполненные "updatedb" и "определяют местоположение \*.jpeg"
updatedb создает индексную базу данных для имен файлов в Вашей системе.
найдите найдет файл от базы данных вместо того, чтобы сканировать каталог каталогом.
Это быстрее, которые находят, ли Вы, делают поиск много после каждой сборки базы данных. Вы могли бы хотеть установить задание крона для выполнения команды updatedb.
Это отчасти похоже на Поиск Google Desktop, но только для поиска имени файла.
Находка является определенно лучшим инструментом для этого задания.
Вывод ls-R будет трудно проанализировать (имена файлов чередованы с именами каталогов). Кроме того, с ls у Вас будет трудное время, имея дело с именами с пробелами, пока находят. - называют '*.jpeg'-print0, генерирует список, разделенный нулевыми символами. у xargs, grep и других есть опция считать этот вид входа. Это означает, что все странные имена сохраняются.
Кроме заметного отличия для канала, обе версии могут рассматриваться как равные. Реализация (ls.c по сравнению с find.c, взятым от busybox), смотрит вполне то же при поиске файлов. Можно также сократить первый:
ls -R *.jpeg