Как найти файл в файловой системе из командной строки?

При чтении журналов изменений Вы будете видеть большое сотрудничество между Debian и Ubuntu. Вот рабочий процесс обменов:

рабочий процесс http://www.diagrammr.com/png?key=dodjkzMu8Bg

Исправления безопасности, не показанные, как они везде кроме testing.

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

Лично, я выбираю Debian testing потому что это имеет некоторую форму устойчивости (не быть unstable в течение по крайней мере 10 дней) без определенного дня патча в году (только один раз в два года). В моей точке зрения тестирование Debian еще более стабильно, чем полугодовая Ubuntu (не LTS).

Для другого человека, которые просят, советуют, я говорю, что "Ubuntu", ради простоты, люди любит переустанавливать, я не делаю.

10
24.11.2018, 22:11
4 ответа
locate filename
find -name '*filename*'
echo **/*filename*
ls -ld **/*filename*

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

Список содержания каталога является своего рода вторичной функцией ls. Основное задание ls, тот, который поднимает большую часть его сложности, подстраивает свой дисплей. (Посмотрите на руководство и сравните число вариантов, связанное с выбором, какие файлы отобразить по сравнению с числом вариантов, которые управляют тем, какую информацию отобразить о каждом файле и как дисплей отформатирован. Это верно оба из GNU ls, который Вы найдете на Linux, и других систем с меньшим количеством опций, с первых лет.)

Режим по умолчанию ls это, когда Вы передаете его каталог, это перечисляет файлы в том каталоге. При передаче его какой-либо другой тип файла (регулярный файл, символьная ссылка, и т.д.), это перечисляет просто тот файл. (Это относится к каждому аргументу отдельно.) Опция -d говорит ls никогда не убывать в каталог.

ls действительно имеет опцию -R это говорит этому перечислять каталоги рекурсивно. Но это имеет ограниченную применимость и не позволяет много фильтрации на выводе.

Самый первый инструмент, который выполнит сопоставление с образцом, является самой оболочкой. Вам не нужна никакая другая команда: просто введите свои подстановочные знаки, и Вы установлены. Это известно как globbing.

echo *filename*

Традиционно, подстановочные знаки были ограничены текущим каталогом (или обозначенный каталог: echo /some/where/*filename*). A * соответствия любое имя файла или любая часть имени файла, но *.txt не будет соответствовать foo/bar.txt. Современные оболочки добавили шаблон **/ что означает “в этом каталоге, или в любом каталоге ниже его (рекурсивно)”. С ударом, по историческим причинам совместимости, эта опция должна быть явно активирована с shopt -s globstar (можно вставить эту строку Ваш ~/.bashrc).

echo **/*filename*

echo управляйте просто повторяет список имен файлов, сгенерированных оболочкой назад в Вас. Как исключение, если нет никакого имени файла соответствия вообще, подстановочный шаблон оставлен без изменений в ударе (если Вы не устанавливаете shopt -s nullglob, в этом случае шаблон расширяется до пустого списка), и zsh сигнализирует об ошибке (если Вы не устанавливаете setopt nullglob, или setopt no_no_match который заставляет шаблон быть оставленным без изменений).

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

Традиционная команда для поиска файла в дереве каталогов find. Это идет со многими опциями управлять, какие файлы отобразить и что сделать с ними. Например, для поиска файлов, имя которых соответствует шаблону *filename* в текущем каталоге и его подкаталогах и печати их имена:

find /some/dir -name '*filename*' -print

-print действие (большинство других действий состоит из выполнения команды на файле); если Вы не помещаете действие, -print подразумевается. Кроме того, если Вы не указываете каталога для пересечения (/some/dir выше), текущий каталог подразумевается. Условие -name '*filename' говорит для списка (или действие на) только файлов, имя которых соответствует тому шаблону; существует много других фильтров, такой как -mtime -1 соответствовать файлам, измененным за прошлые 24 часа. Можно иногда опускать кавычки на -name '*filename*', но только если подстановочный знак не соответствовал бы никакому файлу в текущем каталоге (см. выше). В целом, краткая форма

find -name '*filename*'

Другой полезный инструмент, когда Вы знаете (часть) название файла, locate. Этот инструмент запрашивает базу данных имен файлов. В типичных системах это обновлялось каждую ночь. Преимущество locate find / это, это намного быстрее. Оборотная сторона - то, что ее информация может быть устаревшей. Существует несколько реализаций locate которые отличаются по их поведению в многопользовательских системах: основное locate программа индексирует только публично читаемые файлы (можно хотеть выполнить компаньона updatedb сделать вторую базу данных, которая индексирует все файлы в Вашей учетной записи); существуют другие версии (mlocate, slocate), которые индексируют все файлы и имеют locate программа фильтрует базу данных, чтобы только возвратить файлы, которые Вы видите.

locate filename

Иногда Вы думаете, что файл обеспечивается пакетом в Вашем распределении, Вы знаете (часть) название файла, но не название Вашего пакета, и требуется установить пакет. Много дистрибутивов обеспечивают инструмент для этого. На Ubuntu это apt-file search filename. Для эквивалентных команд в других системах проверьте Pacman Rosetta.

13
27.01.2020, 20:00
  • 1
    Желание я мог-проголосовать за это снова. Просто должен был искать это для другого проекта сегодня вечером. Еще раз спасибо, @Gilles! –  Iszi 12.01.2012, 08:02

эквивалент Вашему примеру DOS был бы:

cd /
find . -name \*filename\* -print

На Linux Вам обычно не нужно -print аргумент, больше, все же. Если Вы работаете над другими операционными системами, может быть удобно знать о.

6
27.01.2020, 20:00

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

В установке по умолчанию (на Ubuntu), locate настраивает ежедневную газету cron задание, которое сканирует файловую систему и обновляет базу данных...

Если Вы чувствуете, что необходимо осовременить базу данных перед следующим обновлением крона, это обычно быстрее, чем find или ls просто работать sudo updatedb и затем locate. Это определенно быстрее, если необходимо сделать больше поисков..., как его имя предполагает, updatedb обновляет базу данных который locate использование...

locate имеет встроенный regex, который делает это очень удобным... Я буду использовать find в сценарии, но я редко использую find в командной строке. Я даже использую locate в (персональных) сценариях..., например. locate -bir "oo.*datt.*mp4$"

locate возвращает полностью определенные пути подобранных файлов.

5
27.01.2020, 20:00
find [path] -name [filename]

Например, если бы я хочу искать / корневой каталог имя файла, содержащее нечто, я использовал бы команду:

find /home -name *foo*

используйте команду man find для большего количества информации о команде находки и аргументах,

2
27.01.2020, 20:00
  • 1
    необходимо заключить в кавычки или выйти *s, чтобы препятствовать тому, чтобы оболочка интерпретировала их. –  Shawn J. Goff 16.11.2011, 04:43
  • 2
    Тот дистрибутив/оболочка конкретен? Я выполнил его в Fedora 16 без Escape, и это хорошо работало. –  josh-cain 16.11.2011, 04:47
  • 3
    Существуют опции в некоторых оболочках, которые передают звезды программе, если они, оказывается, ничему не соответствуют. Попытайтесь создать файл в своем текущем каталоге, который подобран тем шаблоном, и попробуйте команду снова. –  Shawn J. Goff 16.11.2011, 04:51

Теги

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