* в конце пути к каталогу

Я довольно новичок в Unix, поэтому, пожалуйста, несите меня немного. У меня есть вопрос о символе * в конце пути к каталогу в сценарии bash.

У меня есть сценарий, который должен автоматически удалять некоторые архивы с сервера, как только они станут достаточно старыми. Сценарий находится на машине A, и мне нужно запустить его на машине B. Я получаю доступ к обеим машинам удаленно через ssh (без sudo, просто обычный пользователь). Одним из правил скрипта является то, что ему нужно удалять только архивы в папках, начинающихся с dirA/dirB/dirC/dirD/dirE* .

Однако в этом месте нет dirE , поэтому я предполагаю, что * обозначает некоторую переменную. Это то, что я хотел бы знать, что означает * в конце пути к каталогу и что делает скрипт?

3 Solutions collect form web for “* в конце пути к каталогу”

* Здесь является «символом глобуса» и означает «совпадение 0 или более символов». Для иллюстрации рассмотрим этот каталог:

 $ ls dirA dire dirE dirEa dirEEE $ echo dirE* dirE dirEa dirEEE 

Как вы можете видеть выше, glob dirE* соответствует dirE , dirEa и dirEEE но не dirA или dire (системы * nix чувствительны к регистру).

Таким образом, в вашем скрипте это означает, что он удалит архивы из любого каталога в dirA/dirB/dirC/dirD/ , имя которого начинается с dirE .

Я просто добавлю примечание для тех, кто приходит к этому вопросу и по другой причине.

Если вы видите * в конце имени файла в выводе ls (на самом деле ls -F , но ls иногда псевдонимом ls -F (или встроенным ls-F в tcsh ) или завершениями zsh или tcsh , это совсем другое.

С опцией -F ls добавляет завершающий символ в конце некоторого имени специального файла, чтобы помочь определить их особенность . zsh и tcsh делают то же самое при переходе имени файла.

Если ты видишь:

 $ ls -F dir/ fifo| file link@ ls* socket= 

Те / , | , * и = не являются частью имени файла (хотя они могут быть, если кто-то пытался обмануть вас), но прилагаются ls чтобы сообщить вам, что:

  • dir – это каталог ( / )
  • fifo – именованный канал / fifo ( | )
  • link является символической ссылкой ( @ )
  • ls – исполняемый обычный файл ( * ) (имеет хотя бы один бит выполнения в своих разрешениях)
  • socket – это сокет домена Unix ( = )

Некоторые реализации ls (и завершение zsh ) также могут выполнять эту дифференциацию через цвета для терминалов, которые поддерживают их с различными параметрами.

Специальный символ * является подстановочным символом, который может представлять любое количество нормальных символов. Следовательно, привет, черт, помощь, все три из этих имен могут быть представлены регулярным выражением hel *. В вашем случае dirE * выберет все файлы, начинающиеся с dirE. * не обязательно появляться только в конце имени, его можно использовать где угодно в одном слове. Регулярное выражение в 55 минут является отличным руководством по регулярному выражению.

  • Как я могу обрабатывать очереди?
  • Сравнение файлов и их свойств
  • Сравнение двух разделенных файлов и выходных различий
  • как редактировать двуязычный текст с помощью скриптов?
  • Запуск программы (команды) на терминале после экрана входа в Ubuntu 14.04
  • Сравните подобие или расстояние levenshtein между каждой парой линий внутри файла?
  • Заменить имя файла с именем родительской папки
  • Разрешить только сценарий оболочки, но не команду
  • Как сделать временный файл в ОЗУ?
  • Используйте sed и sed самостоятельно, чтобы выполнить подстановку в строке, начинающейся с определенной строки, только если!
  • получение имен всех открытых файлов PDF (в evince или иначе)
  • Linux и Unix - лучшая ОС в мире.