Что делает touch *?

Недавно в интервью мне задали вопрос - как удалить файл с именем '*'? Итак, я попытался создать файл как - touch *. Когда я перечисляю, я не вижу этот файл. Когда я редактирую (vi *). Я открываю файл со случайным текстом. Так что же такое сенсорный *?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
149
3

Ответы 3

Оболочки расширяют *. touch * - это touch every nonhidden file in the current directory. Если вы хотите создать файл с буквальным именем *, вам нужно указать его в кавычках: touch \* (или touch '*', или touch "*" и эквивалент для других команд, таких как rm).

Или touch '*' или touch "*", поскольку шары не раскрываются внутри кавычек. Чтобы удалить файл с именем *, используйте rm '*', rm \* или rm "*".

codeforester 15.09.2018 18:27

@codeforester Спасибо за информацию, которую я, наверное, должен был включить. У меня есть сейчас.

PSkocik 15.09.2018 19:04

Согласно man touch, touch изменяет временную метку файла. Если файл не существует, он создает его пустым, если не указаны параметры -c или -h.

В Bash * - это символ подстановки, который распространяется на каждый не скрытый файл и каталог в текущем каталоге. Это означает, что touch * изменит метку времени каждого файла и каталога в текущем каталоге, если таковые имеются, на текущие дату и время.

Вы должны найти unix "globbing".

Оболочка будет смотреть на команду и заменять * каждым файлом (не начинающимся с '.' Или скрытым), если вы не экранируете этот специальный символ * или не поместите его в одинарные кавычки '*'

Вы можете использовать это, чтобы применить команду ко многим файлам, не перечисляя их вручную.

Если вы хотите увидеть, что * расширяется и как от него избавиться, вы можете выполнить следующие команды:

  echo *
  echo '*'
  echo \*

Вы также можете использовать это с более конкретным шаблоном, например

  <command> a* # run the command on the list of file starting with a

Если вы хотите увидеть, что фактически выполнял терминал, когда вы запускали touch * run:

 echo touch * 

Команда touch, как объяснялось ранее, либо создаст пустой файл, если имя файла не существует, либо обновит последнюю измененную метку времени в существующих файлах. Итак, вы только что обновили последние измененные временные метки каждого не скрытого файла в каталоге, в котором вы выполняли команду.

Обратите внимание, что это происходит до того, как ваша команда будет вызвана. И если список файлов ОЧЕНЬ большой (миллионы), вы получите сообщение об ошибке, так как список файлов будет слишком большим, чтобы поместиться в буфер команд (иначе говоря, строка вашей расширенной команды будет слишком большой)

Дополнительная литература: https://www.linuxjournal.com/content/bash-extended-globbing

Другие вопросы по теме