Скажіть, що є файли з іменами:
batman.c
debate.c
cricketbat.c
Яка команда і як я можу використовувати її для переліку всіх цих файлів за допомогою тегу пошуку bat?
Скажіть, що є файли з іменами:
batman.c
debate.c
cricketbat.c
Яка команда і як я можу використовувати її для переліку всіх цих файлів за допомогою тегу пошуку bat?
Відповіді:
batбудь-якого місцяЩоб знайти всі файли в будь-якому місці, /path/to/folderчиї імена містяться bat, ви можете використовувати:
find /path/to/folder -name '*bat*'
Я цитував шаблон пошуку , *bat*тому що, якщо котирування були опущені і файли збігаються *bat*в поточному каталозі, то оболонка розширюватиметься *bat*в їх список і передати , що до find. Тоді findб нічого не вийшло. ( \*bat\*а "*bat*"також працювати.)
Для пошуку в папці, в якій ви зараз перебуваєте (наприклад, у якій ви cdредагували), використовуйте ., як завжди:
find . -name '*bat*'
Для пошуку всього комп’ютера використовуйте/ . Для пошуку в домашньому каталозі використовуйте ~або повне ім’я домашнього каталогу. ( Оболонка розширюється~ до повноцінного шляху вашого домашнього каталогу.)
Якщо ви хочете шукати без регістру, щоб файли, що містять BAT, bAtі так далі, збігаються, використовуйте -inameтест замість -nameтесту:
find /path/to/folder -iname '*bat*'
Я помітив, що всі ваші файли закінчуються .c. Якщо ви хочете знайти лише такі файли, скористайтеся:
find /path/to/folder -name '*bat*.c'
Я помітив, що всі ваші імена файлів є batабо на самому початку, або в самому кінці частини, що передує .cсуфіксу. Якщо ви хочете уникнути відповідності таких файлів embattled.c, ви можете використовувати:
find /path/to/folder -name '*bat.c' -o -name 'bat*.c'
-oє або оператором.
Щоб знайти лише звичайні файли - а не папки, символічні посилання та спеціальні вузли пристроїв - ви можете використовувати -type f. Це часто рекомендується, а іноді і цілком доречно ... але часто не те, що ви дійсно хочете , особливо якщо ви працюєте findз метою самостійного вивчення результатів. Якби у вас було символічне посилання, яке відповідало вашому пошуку, не хотіли б ви про це знати?
Якщо ви хочете знайти як звичайні файли, так і символічні посилання, ви можете скористатися:
find /path/to/folder -name '*bat*' \( -type f -o -type l \)
Це використовує -oоператор, а також круглі дужки для групування (що повинно бути цитувано, щоб оболонка не зверталася до них спеціально; інакше ви отримаєте синтаксичну помилку).
Але припустимо, ви хочете бачити лише символічні посилання, які в кінцевому підсумку вказують на звичайний файл (а не символічні посилання на каталоги, вузли пристроїв тощо). Це насправді навіть простіше: використовувати -xtypeзамість -type. Якщо ви не працюєте findз -Lпрапором, -xtypeсимволічне посилання перевіряє тип файлу, на який вказує посилання.
find /path/to/folder -name '*bat*' -xtype f
Якщо у вас є посилання на інше символьне посилання на файл, воно -xtype fбуде відповідати, навіть якщо його пряма мета - це інше символьне посилання, а не звичайний файл. Це майже завжди те, що ви хочете.
Часто люди думають, що хочуть -type f, але насправді вони хочуть -xtype f.
findдію за замовчуванням, якщо ви не вказали, є -print. Усі команди, наведені вище, еквівалентні самим собі, з -printпозначкою в кінці.
findчасто використовується для запуску команд на основі знайдених файлів - часто це команди, які вносять зміни. Але є й інші дії, метою яких є окрім результатів -print. Особливий інтерес викликає -ls:
find /path/to/folder -name '*bat*' -ls
Це дає детальну інформацію про кожен файл у форматі з декількома стовпцями, схожим на (хоча і не зовсім такий, як), який ви побачили, запустивши .ls file
Для отримання додаткової інформації про findта інші способи пошуку файлів див.
findкерівництва , доступна в Інтернеті або за допомогою запуску man findв терміналі.find, locateі xargsкомунальні послуги.-xtypeпоради; можливо, ls *bat*і -maxdepth/ mindepthтакож варто згадати.
ls уже висвітлювалась , я зосередився на рекурсивному випадку, що findтут. Звичайно, також буде корисною детальною відповіддю, що охоплює не (або менше) -рекурсивний перелік імен файлів, що відповідають деякому шаблону ( lsі findз -maxdepth). Ви можете опублікувати таку відповідь!
Найпростіший спосіб - бігати
locate bat
Таким чином ви можете шукати на всьому комп’ютері файли, що містять "bat" у назві файлу
Щоб оновити список файлів на вашому ПК, запустіть
updatedb
Запустіть цю команду, коли ви нещодавно додали нові файли до свого облікового запису
updatetdb
updatedbвостаннє або автоматично було запущено), sudo updatedbпотрібно запустити спочатку, так.
bat.
find /при locateпошуку в базі даних, в той час як findрекурсивно перераховується, /а потім відповідає регексу.
Відкрийте термінал і змініть каталоги в каталог, з якого ви хочете почати пошук, а потім запустіть цю команду:
find . -name "*bat*" -type f
.Починає команди пошуку з поточного каталогу. Відповідає рядку і є чутливим до регістру. ( Чутливий до регістру)
В пошук файлів тільки.-namebat-iname-type f
Якщо файли знаходяться в поточному каталозі, використовуйте:
$ ls *bat*
batgirl.c batman.c batwoman.c cricketbat.c
Або (мати їх по рядку):
$ ls -1 *bat*
batgirl.c
batman.c
batwoman.c
cricketbat.c
Якщо ви хочете шукати в системі для цих файлів, використовуйте:
$ find / -name "*bat*"
/path/to/cricketbat.c
/path/to/batgirl.c
/path/to/batwoman.c
/path/to/batman.c
Ви хочете скористатися findкомандою з -inameможливістю збігу імен файлів, нечутливих до регістру, або з -nameможливістю збігу імен файлів, залежних від регістру. Обидва вони дозволять вам використовувати імена підстановки. Отже, щоб знайти будь-які імена файлів, які містять "bat", ви б використовували:
find / -iname '*bat*'
Або
find / -name '*bat*'
В *означає «будь-який символ (и)», тому пошук шукає batз будь-якими символами, не включаючи жодного, до або після нього. В /пошук з кореневого каталогу рекурсивно, ви можете використовувати , .який буде шукати рекурсивно з поточного каталогу або абсолютний шлях для того, де ви хочете , щоб знайти. Погляньте, як шукати файли за допомогою regex в скрипті оболонки Linux
-type f, що робить більше, ніж просто виключати каталоги і часто не є тим, чого користувачі дійсно хочуть .
Користуйся добрим старим find.
find <path_for_search> -type f -iname "*bat*"
напр .:
% find . -type f -iname "*bat*"
./batgirl.c
./batwoman.c
./cricketbat.c
./batman.c
від man find:
-type c
File is of type c:
[..]
d directory
[..]
f regular file
[..]
-iname pattern
Like -name, but the match is case insensitive.