
Забележка: За да използвате find, започнете с отваряне на терминална сесия за достъп до командния ред.
Основна функционалност на find
Стартирането на търсене без никакви опции ще създаде списък на всеки файл и директория в и под работната директория. Например, ако вашата работна директория е / home / hope / Documents, изпълнението на find ще изведе следното:
- Всеки файл в / home / hope / Документи .
- Всяка поддиректория в / home / hope / Documents .
- Всеки файл във всяка от тези поддиректории.
Нека да го видим в действие. Първо, нека проверим нашата работна директория, като използваме командата pwd:
хората с увреждания
/ Начало / надеждата / Документи
Сега нека изпълним търсене без опции:
намирам
, ./images ./images/hp ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG. /images/memes/picard.jpg ./gimp-2.8.16.tar.bz2 ./hp-fanfic ./hp-fanfic/malfoys-revenge.doc ./hp-fanfic/weekend-at-hagreds.doc ./ hp-fanfic / dumbledores-lament.doc ./archlinux-2016.02.01-dual.iso
В този пример виждаме общо десет файла и четири поддиректории в папката „ Документи “ и под нея.
Забележете, че изходът започва с една точка, която представлява работната директория. Изпълняването на търсене без опции е същото като задаването на това, че търсенето трябва да започне в работната директория, като това:
намирам .
Горният пример е "правилния" начин за използване на find . Ако се опитате да го използвате в друга UNIX-подобна операционна система, като например FreeBSD, ще откриете, че се изисква посочване на директория, така че е добра практика да използвате тази форма на командата.
Указване къде да се търси
За да изброявате само файлове и поддиректории, които се съдържат в директорията / home / hope / Documents / images, посочете го като първия аргумент на командата:
find / home / hope / Документи / изображения
/ начало / надежда / Документи / изображения / начало / надежда / Документи / images / hp /home/hope/Documents/images/hp/snape.jpg /home/hope/Documents/images/hp/harry.jpg / начало / надежда / Documents / images / memes /home/hope/Documents/images/memes/winteriscoming.jpg /home/hope/Documents/images/memes/goodguygary.JPG /home/hope/Documents/images/memes/picard.jpg
Забележете, че целият път също е показан в резултатите.
Ако нашата работна директория е / home / hope / Documents, можем да използваме следната команда, която намира същите файлове:
find ./images
Но този път изходът отразява началното местоположение на търсенето и изглежда по следния начин:
./images ./images/hp ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG. /images/memes/picard.jpg
По подразбиране търсенето ще изглежда във всяка поддиректория на началното ви местоположение. Ако искате да ограничите колко нива на поддиректория да търсите, можете да използвате опцията -maxdepth с номер.
Например, задаване на -maxdepth 1 ще търси само в директорията, където започва търсенето. Ако бъдат намерени поддиректории, те ще бъдат изброени, но не и търсени.
намирам . -maxdepth 1
, ./images ./bigfiles.txt ./gimp-2.8.16.tar.bz2 ./hp-fanfic ./archlinux-2016.02.01-dual.iso
Посочването на -maxdepth 2 ще търси в директорията и в една поддиректория дълбоко:
намирам . -максинна дължина 2
, ./images ./images/hp ./images/memes ./gimp-2.8.16.tar.bz2 ./hp-fanfic ./hp-fanfic/malfoys-revenge.doc ./hp-fanfic/weekend-at- hagreds.doc ./hp-fanfic/dumbledores-bg.doc ./archlinux-2016.02.01-dual.iso
Посочването -maxdepth 3 ще търси едно ниво по-дълбоко от това:
намирам . -малка дължина 3
, ./images ./images/hp ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG. /images/memes/picard.jpg ./gimp-2.8.16.tar.bz2 ./hp-fanfic ./hp-fanfic/malfoys-revenge.doc ./hp-fanfic/weekend-at-hagreds.doc ./ hp-fanfic / dumbledores-lament.doc ./archlinux-2016.02.01-dual.iso
Намиране по име
За да ограничите резултатите от търсенето до съвпадение само на файлове и директории, които имат определено име, използвайте опцията -name и поставете името в кавички:
намирам . -име "picard.jpg"
./images/memes/picard.jpg
Можете също да използвате заместващи символи като част от името на файла. Например, за да намерите всички файлове, чието име завършва с .jpg, можете да използвате звездичка, за да представите останалата част от името на файла. Когато изпълните командата, обвивката ще нагласи името на файла в нещо, което съответства на шаблона:
намирам . -name "* .jpg"
./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes/winteriscoming.jpg ./images/memes/picard.jpg
Забележете, че нашата команда не е посочила файла, чието разширение ( JPG ) е с главни букви. Това е така, защото за разлика от други операционни системи, като Microsoft Windows, имената на файловете в Linux са чувствителни към малки и големи букви.
За да извършите търсене, което не е чувствително към регистър, използвайте опцията -iname :
намирам . -име "* .jpg"
./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG ./images/memes/picard.jpg
Намиране само на файлове или само на директории
За да изброите само файлове и да пропуснете имената на директории от резултатите си, укажете тип f :
намирам . -тип f
./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG ./images/memes/picard.jpg ./gimp-2.8 .16.tar.bz2 ./hp-fanfic/malfoys-revenge.doc ./hp-fanfic/weekend-at-hagreds.doc ./hp-fanfic/dumbledores-bg.doc ./archlinux-2016.02.01-dual .iso
За да посочите само директории и да пропуснете имена на файлове, укажете тип d :
намирам . -тип d
, ./images ./images/hp ./images/memes ./hp-fanfic
Намиране на файлове въз основа на размера
За да се покажат само файлове с определен размер, можете да използвате опцията -size . За да зададете размера, използвайте знак плюс или минус (за "повече от" или "по-малко от"), число и количествена суфикс, като k, M или G.
Например, за да намерите файлове, които са "по-големи от 50 килобайта", използвайте размер + 50k :
намирам . -размер + 50k
./images/memes/winteriscoming.jpg ./gimp-2.8.16.tar.bz2 ./archlinux-2016.02.01-dual.iso
За файлове "по-големи от 10 мегабайта" използвайте -size + 10M :
намирам . -размер + 10M
./gimp-2.8.16.tar.bz2 ./archlinux-2016.02.01-dual.iso
За "по-голям от 1 гигабайт" използвайте -size + 1G :
намирам . -size + 1G
./archlinux-2016.02.01-dual.iso
За файлове в определен диапазон от размери, използвайте две опции за размер . Например, за да намерите файлове "по-големи от 10 мегабайта, но по-малки от 1 гигабайта", укажете -size + 10M -size -1G :
намирам . -размер + 10M-размер -1G
./gimp-2.8.16.tar.bz2
Намиране на файлове на базата на промяна, достъп или промяна на състоянието
Опцията -mtime ограничава търсенето с колко дни след като съдържанието на файла е променено. За да посочите дни в миналото, използвайте отрицателно число. Например, за да намерите само тези файлове, които са били променени през последните два дни (преди 48 часа), използвайте -mtime -2 :
намирам . -mtime -2
Опцията -mmin прави същото, но по отношение на минути, а не дни. Тази команда например показва само файлове, модифицирани през последните половин час:
намирам . -mmin -30
Подобна опция е -ctime, която проверява кога състоянието на файла е последно променено, измерено в дни. Промяната в състоянието е промяна в метаданните на файла. Например промяната на разрешенията на даден файл е промяна на състоянието.
Опцията -cmin ще търси промяна на състоянието, измерена в минути.
Можете също да търсите кога е бил достъпен последен файл - с други думи, когато съдържанието му е било последно гледано. Опцията -atime се използва за търсене на файлове въз основа на последното им време за достъп, измерено в дни.
Опцията -amin ще изпълни същото ограничение за търсене, но измерено в минути.
Пренасочване на изход към текстов файл
Ако извършвате много голямо търсене, може да искате да запишете резултатите от търсенето във файл, така че да можете да видите резултатите по-късно. Можете да направите това, като пренасочите изхода си за намиране към файл:
намирам . -iname "* .jpg"> images.txt
След това можете да отворите резултатите си в текстов редактор или да ги отпечатате с командата cat .
cat images.txt
./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG ./images/memes/picard.jpg
Като алтернатива, можете да изведете изхода си в командата tee, която ще отпечата изхода на екрана и ще го запише във файл:
намирам . -размер + 500M | tee bigfiles.txt
./archlinux-2016.02.01-dual.iso
cat bigfiles.txt
./archlinux-2016.02.01-dual.iso
Потискане на съобщенията за грешки
При извършване на търсене може да получите съобщението за грешка „Отказ за разрешение“. Например, ако търсите в главната директория като нормален потребител:
намирам /
find: `/ var / lib / sudo / ts ': Разрешение е отказано:` / var / lib / sudo / lectured': Разрешение за отхвърляне: `/ var / lib / polkit-1 ': Разрешено отхвърляне на разрешение:` / var / lib / container ': Разрешение е отказано: `/var/lib/gdm3/.dbus': Разрешение е отказано:` /var/lib/gdm3/.config/ibus ': Разрешено е отказ ...
Ще получите това съобщение за грешка, ако find се опита да получи достъп до файл, който вашият потребителски акаунт няма право да чете. Можете да извършите търсенето като суперпотребител ( root ), който има пълен достъп до всеки файл в системата. Но не е препоръчително да правите неща като root, освен ако няма други опции.
Ако трябва само да скриете съобщенията "Разрешение за отказ", можете да добавите 2 &> 1 | grep -v "Разрешено е разрешение" до края на командата ви, като това:
find / 2> & 1 | grep -v "Отказано разрешение"
Горният пример филтрира съобщенията „Отказано разрешение“ от търсенето ви. Как?
2> & 1 е специално пренасочване, което изпраща съобщения за грешки до стандартния изход за свързване на комбинираните линии на изхода към командата grep . След това grep -v изпълнява обратен мач на "Permission denied", показвайки само редове, които не съдържат този низ.
Пренасочването и използването на grep за филтриране на съобщенията за грешки е полезна техника, когато „Разрешението за отказ“ затрупва резултатите от търсенето и не можете да извършите търсенето като root.
Примери
find ~ /. -име "* .txt" -amin -120
Намерете всички файлове в домашната си директория и отдолу, които завършват с разширение " .txt ". Показване само на файлове, достъпни през последните два часа.
намирам . -name "* .zip" -размер + 10M -mtime -3
Намерете всички файлове в работната директория и под чието име има разширение " .zip " и чийто размер е по-голям от 10 мегабайта. Показване само на файлове, чието съдържание е било променено през последните 72 часа.
намирам . -име "* report *" -тип f -dexth 2
Извършване на търсене на файлове, които съдържат думата " отчет " в името им. Ако търсенето намери директория с "отчет" в името си, не я показвайте. Търсете само в работната директория и едно ниво под него.
find / -name "* init *" 2> & 1 | grep -v "Отказано разрешение" | tee ~ / initfiles.txt
Намерете всички файлове в системата, чието име съдържа " init ", като потискате съобщенията за грешки. Покажете резултатите на екрана и ги изведете във файл във вашата домашна директория с име " initfiles.txt ".