використання * у пошуку файлів


9

читаючи про пошук файлів Linux, я отримав наступне ...

Для пошуку файлів за допомогою * wildcard замініть невідомий рядок на *, наприклад, якщо ви пам'ятаєте лише, що розширення було .out, введіть ls * .out

і коли я спробував наступну команду в системі (ubuntu 14.04 LTS) .. Я отримав

anupam@JAZZ:~$ ls  *.bash* 

ls: cannot access  *.bash* : No such file or directory

anupam@JAZZ:~$ ls  .bash*

.bash_history   .bash_logout  .bash_profile  .bashrc

anupam@JAZZ:~$

у першому випадку, чому він відображає Немає такого каталогу ( *.bash*), а в наступному випадку показує файли ( .bash*)

Я новачок у цьому ароматі, і відповідно до моїх теорій автоматичних класів (*) означає будь-яку комбінацію рядків, включаючи епсілон (порожній), Так чому результати в різних випадках різні?

Відповіді:


11

Коли ви розширюється до того, що передається . Тобто , якщо у нас є три файли ( , і ) в каталозі насправді працює .ls **lsabcls *ls a b c

Коли Bash не в змозі розгорнутись, він проходить через необроблений рядок¹. Ось чому ви бачите підстановку в помилці, а також не знайдене повідомлення. lsнамагався показати перелік файлу, який буквально називається *.bash*.

То чому б це не розширилося? Ну а за замовчуванням глобалізація (так називається розширення підстановки) не поверне приховані файли. Ви можете змінити це shopt -s dotglob(це не збережеться, якщо ви не вставите його в своє .bashrc- воно може бути відключено за замовчуванням з уважної причини, тому будьте обережні), ось короткий демонстраційний приклад:

$ ls  *.bash*
ls: cannot access *.bash*: No such file or directory
$ shopt -s dotglob
$ ls  *.bash*
.bash_aliases  .bash_history  .bash_logout  .bashrc  .bashrc.save

Виняток з цього - як ви вже показали - коли ви вже чітко заявили, що файли будуть приховані з таким малюнком .bash*. Він просто переосмислює dotglobналаштування за замовчуванням :

$ shopt -u dotglob  # unset dotglob
$ ls .bash*
.bash_aliases  .bash_history  .bash_logout  .bashrc  .bashrc.save

У будь-якому разі, крім цієї химерності, я сподіваюся, що це допоможе вам зрозуміти, що відбувається під поверхнею.


Є й інші shoptпрапори , які змінюють , як підстановка роботи: extglob, failglob, globstar, nocaseglobі nullglob. Вони та плот інших shoptпрапорів задокументовані як частина посібника Bash .

Аналогічно, сторінка зі співпаданням малюнків повинна добре читати.

¹ Якщо немає failglobабо nullglobвстановлено.


ніж @ @ Олі, я не все зрозумів, як я вже згадував, я новик у цьому ароматі, але я отримав 80% від цього ... Це допомогло мені
lazarus
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.