Яка різниця між * і *. * Під час копіювання?


19

Яка різниця між наступними 2 командами?

cp -rp /dir1/*.* /dir2/
cp -rp /dir1/* /dir2/

12
Хоча обидві відповіді правильні, я думаю, що слід зазначити одне. Приховані файли (файли, які починаються з .подібних .bashrc) не копіюються жодною з цих команд. Щоб скопіювати ці файли, ви повинні чітко вказати, що при .*цьому для копіювання всіх файлів (включаючи приховані) команда була бcp -rp /dir1/.* /dir1/* /dir2/
YoMismo

Коротше кажучи, *.*чи це спосіб MS-DOS / Windows, а *UNIX / Linux. У суфіксі Unix (закінчення файлу, частина після .- подобається .txtабо .jpg) - необов'язково ... У MS-DOS потрібні .(крапка) та суфікс, щоб відповідати всім файлам, один використовуваний *.*- у той час як для узгодження всіх текстових файлів , можна було б скористатися *.txt.
Баард Копперуд

Суфікс @BaardKopperud не потрібен, можуть бути файли з назвою на зразок FILENAMEабо навіть FILE.
Руслан

1
@Ruslan, але *.*в DOS все ще відповідає файлам з ім'ям FILENAMEабо FILE, оскільки ім'я "дійсно" FILENAME.або FILE.(з порожнім розширенням). У Unix назва "дійсно" FILENAMEабо FILE, таким чином *.*, не збігається.
Джонатан У ролях

1
@Ruslan Це було потрібно для фактичного DOS, більше не потрібно для Windows. Ще в старі часи сингл *би відповідав лише FILE, а не FILE.TXT .
Випадково832

Відповіді:


25

*.*відповідає лише ім’ям файлів з крапкою посередині або в кінці. Наприклад:

abc.jpg
def. 

*відповідає названим файлам вище, а також імена, які зовсім не мають крапки. наприклад:

data

6
Можливо, також зауважте, що антиідіома *.*була правильним способом зіставлення всіх файлів у MS-DOS назад у день 8 + 3 імен файлів. У MS-DOS крапка є обов'язковою (хоч і неявна для файлів, які не мають розширення).
tripleee

11
@ Марк, Ні, я не думаю. якщо у вас немає дотглобу.
Девід Дай

11
Так, я ніколи не усвідомлював, що *.*відповідає, foo.але ні .foo. Та асиметрія страшна.
jamesdlin

9
@jamesdlin, з посібника bash: Коли шаблон використовується для розширення імені файлу, символ '.' на початку імені файлу або одразу після косої риски необхідно чітко відповідати, якщо не встановлено параметр оболонки dotglob.
Девід Дай

1
@jamesdlin. З першого дня Unix (близько 1969 року) записи каталогів, що починаються з крапки, вважалися прихованими . Спочатку це було потрібно, щоб пропустити записи .(поточний каталог) та ..(батьківський каталог), які завжди існують у будь-якому каталозі (навіть порожні dirs). Пізніше Річі та Томпсон вважали корисною функцією приховувати (за замовчуванням) всі .*rcконфігураційні файли та додавали явну -aопцію lsдля відображення всіх цих (прихованих) записів. Тож це не дуже дивно, знаючи історію Unix. Провідна точка в Unix була особливою ще з "назавжди".
аріельф

13

Припустимо, у вас є такі файли у /dir1:

foobar  
foo.bar  
fo.ba  
foo1.bar2  
foobar1  
foobar2  

cp -rp /dir1/*.* /dir2/

Ця команда буде копіювати лише такі файли:

foo.bar  
fo.ba  
foo1.bar2 

cp -rp /dir1/* /dir2/

Це скопіює всі файли в /dir1

Ця умова стосується також і підкаталогів у /dir1..

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.