Qual è la differenza tra * e *. * Durante la copia?


19

Qual è la differenza tra i seguenti 2 comandi?

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

12
Anche se entrambe le risposte sono corrette, penso che ci sia una cosa da notare. I file nascosti (file che iniziano con .like .bashrc) non vengono copiati con nessuno di questi comandi. Per copiare quei file dovresti indicare esplicitamente che con .*ciò, per copiare tutti i file (compresi quelli nascosti) il comando sarebbecp -rp /dir1/.* /dir1/* /dir2/
YoMismo

In breve, *.*è il modo MS-DOS / Windows di farlo, mentre *è il modo UNIX / Linux. Nel suffisso Unix (fine del file, la parte dopo il .- like .txto .jpg) è facoltativa ... In MS-DOS erano necessari il .(punto) e il suffisso, quindi per abbinare tutti i file, uno usato *.*- mentre per abbinare tutti i file di testo , uno userebbe *.txt.
Baard Kopperud,

Il suffisso @BaardKopperud non era richiesto, potrebbero esserci file con nome simile FILENAMEo addirittura FILE.
Ruslan,

1
@Ruslan ma *.*in DOS corrisponde ancora ai file con nome FILENAMEo FILE, perché il nome è 'davvero' FILENAME.o FILE.(con un'estensione vuota). In Unix, il nome è "davvero" FILENAMEo FILE, quindi *.*non corrisponderà.
Jonathan Cast

1
@Ruslan Era richiesto sul DOS attuale, non più richiesto su Windows. Ai vecchi tempi , un singolo *corrispondeva solo FILEe non FILE.TXT .
Casuale 832

Risposte:


25

*.*corrisponde solo ai nomi di file con un punto nel mezzo o alla fine. Per esempio:

abc.jpg
def. 

*corrisponde ai nomi dei file sopra, oltre ai nomi che non hanno affatto un punto. per esempio:

data

6
Forse anche notare che l'anti-idioma *.*era il modo corretto di abbinare tutti i file su MS-DOS nel giorno di 8 + 3 nomi di file. In MS-DOS, il punto è obbligatorio (anche se implicito nei file che non hanno estensione).
Tripleee

11
@Mark, No, non credo. a meno che tu non abbia dotglob attivo.
David Dai,

11
Eh, non ho mai capito che *.*corrispondesse foo.ma non .foo. Quell'asimmetria è terribile.
Jamesdlin,

9
@jamesdlin, dal manuale di bash: quando si usa un pattern per l'espansione del nome file, il carattere '.' all'inizio di un nome file o immediatamente dopo una barra deve essere abbinato esplicitamente, a meno che non sia impostata l'opzione shell dotglob.
David Dai,

1
@jamesdlin. Sin dal 1 ° giorno di Unix (circa 1969), le voci della directory che iniziano con un punto sono state considerate nascoste . Inizialmente ciò era necessario per saltare le voci .(directory corrente) e ..(directory padre) che esistono sempre in qualsiasi directory (anche directory vuote). Ritchie e Thompson in seguito hanno ritenuto utile nascondere (per impostazione predefinita) tutti i .*rcfile di configurazione e hanno aggiunto -aun'opzione esplicita lsper visualizzare tutte queste voci "nascoste". Quindi questo non è molto sorprendente conoscendo la storia di Unix. Un punto di riferimento in Unix è stato speciale da "per sempre".
arielf

13

Supponiamo di avere i seguenti file in /dir1:

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

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

Questo comando copierà solo i seguenti file:

foo.bar  
fo.ba  
foo1.bar2 

cp -rp /dir1/* /dir2/

Questo copierà tutti i file in /dir1

La condizione si applica anche alle sottodirectory in /dir1.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.