GNU/Linux >> Linux Esercitazione >  >> Linux

È un Uuoc (uso inutile del gatto) reindirizzare un file all'altro?

Se voglio creare il contenuto di file2 corrisponde al contenuto di file1 , ovviamente potrei semplicemente eseguire cp file1 file2 .

Tuttavia, se voglio preservare tutto su file2 tranne i contenuti—proprietario, autorizzazioni, attributi estesi, ACL, hard link, ecc., ecc., quindi non vorrei eseguire cp .* In tal caso voglio solo eseguire il plop del contenuto di file1 in file2 .

Sembra che lo farebbe quanto segue:

< file1 > file2

Ma non funziona. file2 viene troncato a nulla e non viene scritto. Tuttavia,

cat < file1 > file2

fa lavoro.

Mi ha sorpreso che la prima versione non funzionasse.

La seconda versione è un UUOC? C'è un modo per farlo senza invocare un comando, semplicemente usando i reindirizzamenti?

Nota:sono consapevole che UUOC è più un punto pedante che un vero anti-modello.

*Come scoperto da tniles09, cp farà in effetti funzionano in questo caso.

Risposta accettata:

cat < file1 > file2 non è un UUOC. Classicamente, < e > eseguire reindirizzamenti che corrispondono a duplicazioni di descrittori di file a livello di sistema.
Le duplicazioni di descrittori di file da sole non fanno nulla (beh, > reindirizzamenti aperti con O_TRUNC , quindi per essere precisi, i reindirizzamenti di output troncano il file di output). Non lasciare che il < > i simboli ti confondono. I reindirizzamenti non spostano i dati:assegnano descrittori di file ad altri descrittori di file.

In questo caso apri file1 e assegna quel descrittore di file al descrittore di file (<file1 ==0<file1 ) e file2 e assegna quel descrittore di file al descrittore di file 1 (>file2 ==1>file2 ).

Ora che hai due descrittori di file, hai bisogno di un processo per spalare i dati tra i due, ed è quello che cat è per.


Linux
  1. Copiare le ultime N righe da un file all'altro?

  2. Come trovare parole da un file in un altro file?

  3. Copia l'intera gerarchia del file system da un'unità a un'altra

  4. sostituire le righe in un file con le righe in un altro per numero di riga

  5. Copia file di grandi dimensioni da un server Linux a un altro

Comando Cat in Linux

Come copiare un file da un'altra directory a quella corrente?

Posso usare un disco di virtualbox per più macchine?

Reindirizza la traccia al file

Come posso reindirizzare un dominio a un altro dominio in locale?

È meglio usare cat, dd, pv o un'altra procedura per copiare un CD/DVD?