7
ls  -al  .functions*
-rw-r--r-- 1 root root 471040 Mar  2 10:01 .functions.php.swo
-rw-r--r-- 1 root root 438272 Mar  2 09:57 .functions.php.swp

* может соответствовать .php.swo и .php.swp
Почему * не может соответствовать .functions.php ?

ls  -al  *.swo
ls: cannot access '*.swo': No such file or directory
ls  -al  *swo
ls: cannot access '*swo': No such file or directory

2 ответа2

11

В качестве дополнения к ответу Шайдо я хотел бы дать несколько объяснений, почему опция -a здесь не будет работать:

Команда ls не обрабатывает подстановочные знаки. Интерпретатор командной строки делает этот шаг:

Если вы введете командную строку « mycommand *.c », интерпретатор командной строки сначала заменит подстановочную строку « *.c » списком подходящих файлов, а затем выполнит полученную командную строку:

mycommand a.c file.c test.c

Интерпретатор командной строки работает одинаково для всех команд, поэтому он не может знать, что -a означает "включая скрытые файлы" в случае команды ls (в то время как -a имеет совершенно другое значение для других команд)...

11

Файлы, начинающиеся с точки, по умолчанию скрыты от списков файлов. Самый простой способ сопоставить файлы такого типа - поставить точку в начале выражения. Однако это будет только совпадение с файлами, начинающимися с . ,

ls  -al  .*.swo

Альтернативой является установка dotglob перед выполнением команды, а затем файлов, начинающихся с . будут включены.

shopt -s dotglob

Добавьте его в ваш ~/.bashrc чтобы установить его по умолчанию.

Обратите внимание, что установка dotglob может привести к неубедительным результатам при использовании оболочки bash, поскольку оба . (текущий каталог) и .. (родительский каталог) появятся при использовании * . С установленным dotglob никогда не пытайтесь использовать rm -R * .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .