
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
решение1
Файлы, начинающиеся с точки, по умолчанию скрыты из списков файлов. Самый простой способ сопоставить такие файлы — поставить точку в начале выражения. Однако это сопоставит только файлы, начинающиеся с .
.
ls -al .*.swo
Альтернативой является установка dotglob
перед запуском команды, тогда .
будут включены файлы, начинающиеся с.
shopt -s dotglob
Добавьте его в свой список, ~/.bashrc
чтобы установить его по умолчанию.
Обратите внимание, чтонастройка dotglob
может привести к непредвиденным результатампри использовании оболочки bash, так как при использовании будут отображаться как .
(текущий каталог), так и (родительский каталог) . С помощью set,..
*
dotglob
никогдапопробуй использовать rm -R *
.
решение2
Какрасширениена ответ Шайдо я хотел бы дать некоторые пояснения, почему эта -a
опция здесь не сработает:
Команда ls
делаетнетОбработка подстановочных знаков. Интерпретатор командной строки выполняет этот шаг:
Если ввести командную строку " mycommand *.c
", интерпретатор командной строки сначала заменит подстановочную строку " *.c
" списком соответствующих файлов, а затем выполнит полученную командную строку:
mycommand a.c file.c test.c
Интерпретатор командной строки работает одинаково для всех команд, поэтому он не может знать, что -a
означает «включая скрытые файлы» в данном случае ls
(хотя -a
для других команд это имеет совершенно другое значение)...