Как найти файл/каталог, который может быть где угодно в командной строке linux?
В идеале я мог бы использовать такую программу, как
find [file or directory name]
чтобы сообщить о путях с соответствующими именами файлов/каталогов. К сожалению, это похоже только на проверку текущего каталога, а не на всю папку.
Я также попытался найти и который, но никто не находит файл, хотя я знаю его на компьютере где-то.
Ответы
Ответ 1
"К сожалению, это похоже только на текущий каталог, а не на всю папку". Предположительно, вы имеете в виду, что он не выглядит в подкаталогах. Чтобы исправить это, используйте find -name "filename"
Если этот файл не находится в текущем рабочем каталоге, вы можете выполнить поиск всей машины через
find / -name "filename"
Это также работает с такими вещами, как find / -name "*.pdf"
и т.д. Иногда мне нравится транслировать это в инструкцию grep (так как на моей машине по крайней мере она выделяет результаты), поэтому я получаю что-то вроде
find / -name "*star*wars*" | grep star
Выполнение этого или подобного метода просто помогает мне мгновенно найти имя файла и узнать, действительно ли это файл, который я ищу.
Ответ 2
Если вам нужно найти вложенные в некоторые разделы:
find / -type f -wholename "*dirname/filename"
Или подключенные каналы:
find / -type d -wholename "*foo/bar"
Ответ 3
Команда find
займет много времени, самый быстрый способ поиска файла - использовать команду locate
, которая ищет имена файлов (и путь) в индексированной базе данных (обновляется командой updatedb
).
Результат сразу появится с помощью простой команды:
locate {file-name-or-path}
Если команда не найдена, вам необходимо установить пакет mlocate
и сначала запустить команду updatedb
чтобы подготовить базу данных поиска в первый раз.
Более подробно здесь: https://medium.com/@thucnc/the-fastest-way-to-find-files-by-filename-mlocate-locate-commands-55bf40b297ab
Ответ 4
Чтобы избавиться от ошибок разрешения (и тому подобное), вы можете перенаправить stderr в никуда
find / -name "something" 2>/dev/null
Ответ 5
Приведенный ниже пример поможет найти конкретную папку в текущем каталоге. В этом примере выполняется поиск только по текущему каталогу, и он будет искать подкаталог, доступный в текущем каталоге.
#!/bin/bash
result=$(ls -d operational)
echo $result
test="operational"
if [ "$result" == "$test" ]
then
echo "TRUE"
else
echo "FALSE"
fi
Ответ 6
Если это командный файл, который вы ищете, самый быстрый и точный способ с
which "commandname"
Это покажет вам фактический файл, используемый для команды, даже если у вас есть много файлов с одинаковым именем в системе.