Jaka jest różnica między następującymi 2 poleceniami?
cp -rp /dir1/*.* /dir2/
cp -rp /dir1/* /dir2/
shell
shell-script
command-line
cp
stany
źródło
źródło
.
podobnego.bashrc
) nie są kopiowane za pomocą żadnego z tych poleceń. Aby skopiować te pliki, należy wyraźnie zaznaczyć, że.*
tak, aby skopiować wszystkie pliki (w tym ukryte), poleceniecp -rp /dir1/.* /dir1/* /dir2/
*.*
jest to sposób na MS-DOS / Windows, podczas gdy*
na UNIX / Linux. W uniksowym sufiksie (końcówka pliku, część po.
- jak.txt
lub.jpg
) jest opcjonalna ... W MS-DOS.
wymagana była kropka i sufiks, więc aby dopasować wszystkie pliki, jeden użyty*.*
- podczas gdy aby dopasować wszystkie pliki tekstowe , można by użyć*.txt
.FILENAME
lub nawetFILE
.*.*
w DOS nadal pasuje do plików o nazwieFILENAME
lubFILE
, ponieważ nazwa to „naprawdę”FILENAME.
lubFILE.
(z pustym rozszerzeniem). W Uniksie, nazwa jest „naprawdę”FILENAME
alboFILE
, więc*.*
nie będzie pasował.*
pasowałby tylko do niegoFILE
, a nie do niegoFILE.TXT
.Odpowiedzi:
*.*
dopasowuje tylko nazwy plików z kropką na środku lub na końcu. Na przykład:*
pasuje do nazw plików powyżej oraz nazw, które w ogóle nie mają kropki. na przykład:źródło
*.*
kiedyś dobrym sposobem na dopasowanie wszystkich plików w MS-DOS w dniu 8 + 3 nazw plików. W MS-DOS kropka jest obowiązkowa (choć niejawna w przypadku plików, które nie mają rozszerzenia).*.*
pasuje,foo.
ale nie.foo
. Ta asymetria jest okropna..
(bieżący katalog) i..
(katalog macierzysty), które zawsze istnieją w dowolnym katalogu (nawet pustych katalogach). Ritchie i Thompson później uznali, że jest to przydatna funkcja do ukrywania (domyślnie) wszystkich.*rc
plików konfiguracyjnych i dodali wyraźną-a
opcjęls
wyświetlania wszystkich tych (ukrytych) pozycji. Nie jest to więc zaskakujące, znając historię Uniksa. Wiodąca kropka w Uniksie jest wyjątkowa od „wieczności”.Załóżmy, że masz następujące pliki
/dir1
:To polecenie skopiuje tylko następujące pliki:
Spowoduje to skopiowanie wszystkich plików
/dir1
Warunek dotyczy również podkatalogów w
/dir1
..źródło