В чем разница между следующими 2 командами?
cp -rp /dir1/*.* /dir2/
cp -rp /dir1/* /dir2/
shell
shell-script
command-line
cp
Stany
источник
источник
.
лайка.bashrc
) не копируются ни одной из этих команд. Чтобы скопировать эти файлы, вы должны явно указать, что для.*
того, чтобы скопировать все файлы (включая скрытые), команда будетcp -rp /dir1/.* /dir1/* /dir2/
*.*
это способ MS-DOS / Windows, а способ*
UNIX / Linux. В Unix суффикс (окончание файла, часть после.
- как.txt
или.jpg
) необязателен ... В MS-DOS.
(точка) и суффикс требовались, поэтому для сопоставления всех файлов использовался один,*.*
а для сопоставления всех текстовых файлов. один будет использовать*.txt
.FILENAME
или дажеFILE
.*.*
в DOS по-прежнему соответствует файлам с именемFILENAME
илиFILE
, потому что имя «реально»FILENAME.
илиFILE.
(с пустым расширением). В Unix, имя «действительно»FILENAME
илиFILE
, так*.*
не будет соответствовать.*
только соответствовалFILE
, а не совпадалFILE.TXT
.Ответы:
*.*
сопоставляет только имена файлов с точкой в середине или в конце. Например:*
совпадает с именами файлов выше, плюс имена, которые не имеют точки вообще. например:источник
*.*
раньше была правильным способом сопоставления всех файлов в MS-DOS в день 8 + 3 имен файлов. В MS-DOS точка является обязательной (хотя и неявной для файлов, которые не имеют расширения).*.*
соответствует,foo.
но нет.foo
. Эта асимметрия ужасна..
(текущего каталога) и..
(родительского каталога), которые всегда существуют в любом каталоге (даже в пустых каталогах). Позже Ричи и Томпсон сочли полезной функцию скрытия (по умолчанию) всех.*rc
файлов конфигурации и добавили явную-a
опциюls
для отображения всех этих (начальных точек) «скрытых» записей. Так что это не очень удивительно, зная историю Unix. Ведущая точка в Unix была особенной с "навсегда".Предположим, у вас есть следующие файлы в
/dir1
:Эта команда скопирует только следующие файлы:
Это скопирует все файлы в
/dir1
Условие распространяется также и на подкаталоги
/dir1
.источник