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

Я довольно новичок в 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 минут является отличным руководством по регулярному выражению.

  • Сравнение двух разделенных файлов и выходных различий
  • Как запустить сценарий при обновлении папки в Solaris 5.10?
  • Как создать сценарий оболочки для обработки команд типа ls -l / somedir
  • Более быстрый способ переименовать повторяющиеся файлы (идентифицированные fdupes) в другом каталоге?
  • Передача значений в скрипт
  • Создать мигающий текст с эхо-символами
  • Команда, работающая от CLI, но не от скрипта
  • Динамически менять экран «hardstatus»
  • Составить имя файла внутри сценария ожидания
  • Построить матрицу на основе значений другой матрицы
  • Есть ли способ создать бесконечный поток с пользовательским характером?
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.