Я только что удалил Firefox, и Google Chrome стал браузером по умолчанию.
Это два отдельных шарика. Первый, *
соответствует всему, кроме скрытых файлов, поэтому выводятся file1.txt
, file2.txt
и file3.txt
. Второй, .*
соответствует скрытым файлам и каталогам только :тем, имя которых начинается с .
, поэтому выводятся .
и ..
.
Если вы хотите распечатать имена файлов/каталогов только с пробелом, за которым следует точка, вам нужно будет экранировать пробел, чтобы он не рассматривался как разделитель:
$ ls
file1.txt 'file2.txt'
$ echo *\.*
file2.txt
Наконец, я, вероятно, должен упомянуть, что *.*
не означает «соответствовать всем». В отличие от систем Windows, *nix-системы не требуют расширения имен файлов (за очень немногими исключениями, расширения являются полностью необязательными и произвольными ). В системах *nix глобус *.*
будет печатать только имена файлов с .
в их имени:
$ ls
file file1.txt 'file2.txt'
$ echo *.*
file1.txt file2.txt
Для печати всех файлов используйте один*
:
$ echo *
file file1.txt file2.txt
Параметры команд разделяются пробелами, если они не заключены в кавычки.
echo *.*
соответствует именам файлов с «любыми символами» (*
), за которыми следует точка (.
), за которой следует «любые символы»(*
).
echo *.*
Первый шаблон сопоставляет имена файлов с «любыми символами»(*
). Второй шаблон (".*
" )соответствует именам файлов, которые начинаются с точки (.
), за которой следуют "любые символы"(*
). Эти «точечные файлы» НЕ соответствуют *
, поэтому их часто называют «скрытыми» файлами.
Две записи, которые вы видите (" .
" и " ..
" ), являются обязательными ссылками на текущий и родительский каталоги.
Работа с именами файлов, содержащими пробелы и другие «забавные» символы (только NUL 0x00
и косая черта /
запрещены в именах файлов )являются сложными (Чтениеman find xargs
)и их следует по возможности избегать.
Существует несколько способов заключать в кавычки пробел в имени файла, каждый из которых имеет несколько разные детали:
echo *\.*
echo *"."*