2.4 Lezione 1
Certificazione: |
Linux Essentials |
---|---|
Versione: |
1.6 |
Argomento: |
2 Trovare il Proprio Modo di Operare su un Sistema Linux |
Obiettivo: |
2.4 Creazione, Spostamento ed Eliminazione di File |
Lezione: |
1 di 1 |
Introduzione
Questa lezione tratta la gestione di file e directory su Linux attraverso strumenti a Command Line.
Un file è una raccolta di dati con un nome e un insieme di attributi. Se, per esempio, dovessi trasferire alcune foto dal tuo telefono a un computer e dovessi dar loro dei nomi descrittivi, ora avresti, su questo computer, un mucchio di file di immagine. Questi file hanno degli attributi come, per esempio, la data dell’ultimo accesso o dell’ultima modifica al file.
Una directory è un tipo speciale di file utilizzato per organizzare i file. Un buon modo per pensare alle directory consiste nel paragonarle alle cartelline utilizzate per organizzare i documenti in uno schedario. A differenza delle cartelline cartacee, puoi facilmente inserire delle directory all’interno di altre directory.
La Command Line è il mezzo più efficace per gestire i file su un sistema Linux. Gli strumenti della shell e della Command Line hanno caratteristiche che rendono l’uso della Command Line più veloce e più semplice di un file manager grafico.
In questa lezione userai i comandi ls
, mv
, cp
, pwd
, find
, touch
, rm
, rmdir
, echo
, cat
e mkdir
per gestire e organizzare file e directory.
Distinzione tra Maiuscole e Minuscole
A differenza di Microsoft Windows, i nomi di file e directory sui sistemi Linux fanno distinzione tra maiuscole e minuscole. Ciò significa che i nomi /etc/
ed /ETC/
rappresentano differenti directory. Prova i seguenti comandi:
$ cd / $ ls bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr $ cd ETC bash: cd: ETC: No such file or directory $ pwd / $ cd etc $ pwd /etc
Il comando pwd
mostra la directory in cui ti trovi attualmente. Come puoi vedere il tentativo di spostarti in /ETC
non ha funzionato in quanto non esiste tale directory. Lo spostamento nella directory /etc
, che esiste, è invece andato a buon file.
Creare Directory
Il comando mkdir
viene utilizzato per creare directory.
Creiamo una nuova directory all’interno della nostra directory home:
$ cd ~ $ pwd /home/user $ ls Desktop Documents Downloads $ mkdir linux_essentials-2.4 $ ls Desktop Documents Downloads linux_essentials-2.4 $ cd linux_essentials-2.4 $ pwd /home/emma/linux_essentials-2.4
Nel corso di questa lezione eseguiremo tutti i comandi all’interno di questa directory o in una delle sue sottodirectory.
Per tornare facilmente alla directory della lezione da qualsiasi altra posizione nel tuo file system, puoi utilizzare il comando:
$ cd ~/linux_essentials-2.4
La shell interpreta il carattere ~
come la tua directory home.
Quando sei nella directory della lezione, crea altre directory da utilizzare per gli esercizi. Puoi aggiungere tutti i nomi delle directory, separati da spazi, al comando mkdir
:
$ mkdir creating moving copying/files copying/directories deleting/directories deleting/files globs mkdir: cannot create directory ‘copying/files’: No such file or directory mkdir: cannot create directory ‘copying/directories’: No such file or directory mkdir: cannot create directory ‘deleting/directories’: No such file or directory mkdir: cannot create directory ‘deleting/files’: No such file or directory $ ls creating globs moving
Nota il messaggio di errore e nota che sono state create solo moving
, globs
e creating
. Le directory copying
e deleting
non esistono ancora. mkdir
, per impostazione predefinita, non crea una directory all’interno di una directory che non esiste. L’opzione -p
o --parents
indica a mkdir
di creare le directory padre se non esistono. Prova lo stesso comando mkdir
con l’opzione -p
:
$ mkdir -p creating moving copying/files copying/directories deleting/directories deleting/files globs
Questa volta non hai ricevuto alcun messaggio di errore. Vediamo quali directory esistono ora:
$ find . ./creating ./moving ./globs ./copying ./copying/files ./copying/directories ./deleting ./deleting/directories ./deleting/files
Il programma find
è solitamente usato per cercare file e directory, ma senza alcuna opzione ti mostra un elenco di tutti i file, di tutte le directory e di tutte le sottodirectory della tua directory corrente.
Tip
|
Quando si elenca il contenuto di una directory con |
Creare i File
In genere i file vengono creati dai programmi, i quali lavorano con i dati memorizzati nei file. Un file vuoto può essere creato usando il comando touch
. Se esegui touch
su un file esistente, il contenuto del file non verrà modificato, ma il timestamp di modifica del file verrà aggiornato.
Esegui il seguente comando per creare alcuni file per la lezione di globbing:
$ touch globs/question1 globs/question2012 globs/question23 globs/question13 globs/question14 $ touch globs/star10 globs/star1100 globs/star2002 globs/star2013
Ora verifichiamo che tutti i file esistano nella directory globs
:
$ cd globs $ ls question1 question14 question23 star1100 star2013 question13 question2012 star10 star2002
Hai visto come touch
ha creato i file? Puoi visualizzare il contenuto di un file di testo con il comando cat
. Provalo su uno dei file che hai appena creato:
$ cat question14
Poiché touch
crea file vuoti, non dovresti ottenere alcun output. Puoi usare echo
con >
per creare semplici file di testo. Provalo:
$ echo hello > question15 $ cat question15 hello
echo
visualizza il testo sulla Command Line. Il carattere >
indica alla shell di scrivere l’output di un comando nel file specificato invece che sul terminale. Questo fa sì che l’output di echo
, hello
in questo caso, venga scritto nel file question15
. Non è specifico di echo
, ma può essere utilizzato con qualsiasi comando.
Warning
|
Fai attenzione quando usi |
Rinominare i File
I file vengono spostati e rinominati con il comando mv
.
Imposta moving
come directory di lavoro:
$ cd ~/linux_essentials-2.4/moving
Crea alcuni file con cui esercitarti. A questo punto dovresti già avere familiarità con questi comandi:
$ touch file1 file22 $ echo file3 > file3 $ echo file4 > file4 $ ls file1 file22 file3 file4
Supponiamo che file22
sia un errore di battitura e che il nome corretto dovesse essere file2
. Correggilo con il comando mv
. Quando si rinomina un file, il primo argomento è il nome corrente, mentre il secondo è il nuovo nome:
$ mv file22 file2 $ ls file1 file2 file3 file4
Fai attenzione con il comando mv
. Se rinomini un file con il nome di un file esistente, quest’ultimo verrà sovrascritto. Facciamo una prova con file3
e file4
:
$ cat file3 file3 $ cat file4 file4 $ mv file4 file3 $ cat file3 file4 $ ls file1 file2 file3
Nota come il contenuto di file3
sia ora file4
. Usa l’opzione -i
per fare in modo che mv
ti avverta se stai per sovrascrivere un file esistente. Provalo:
$ touch file4 file5 $ mv -i file4 file3 mv: overwrite ‘file3’? y
Spostare i File
I file vengono spostati da una directory all’altra con il comando mv
.
Crea alcune directory in cui spostare i file:
$ cd ~/linux_essentials-2.4/moving $ mkdir dir1 dir2 $ ls dir1 dir2 file1 file2 file3 file5
Sposta file1
in dir1
:
$ mv file1 dir1 $ ls dir1 dir2 file2 file3 file5 $ ls dir1 file1
Nota che l’ultimo argomento di mv
è la directory di destinazione. Se l’ultimo argomento di mv
è una directory, i file vengono spostati al suo interno. È possibile specificare più file in un singolo comando mv
:
$ mv file2 file3 dir2 $ ls dir1 dir2 file5 $ ls dir2 file2 file3
È anche possibile usare mv
per spostare e rinominare directory. Rinomina dir1
in dir3
:
$ ls dir1 dir2 file5 $ ls dir1 file1 $ mv dir1 dir3 $ ls dir2 dir3 file5 $ ls dir3 file1
Eliminare File e Directory
Il comando rm
può eliminare file e directory, mentre il comando rmdir
può eliminare solo directory. Puliamo la directory moving
eliminando file5
:
$ cd ~/linux_essentials-2.4/moving $ ls dir2 dir3 file5 $ rmdir file5 rmdir: failed to remove ‘file5’: Not a directory $ rm file5 $ ls dir2 dir3
Per impostazione predefinita, rmdir
può eliminare solo directory vuote; quindi abbiamo dovuto usare rm
per eliminare un file normale. Prova a eliminare la directory deleting
:
$ cd ~/linux_essentials-2.4/ $ ls copying creating deleting globs moving $ rmdir deleting rmdir: failed to remove ‘deleting’: Directory not empty $ ls -l deleting total 0 drwxrwxr-x. 2 emma emma 6 Mar 26 14:58 directories drwxrwxr-x. 2 emma emma 6 Mar 26 14:58 files
Per impostazione predefinita, rmdir
rifiuta di eliminare una directory che non è vuota. Usa rmdir
per rimuovere una delle sottodirectory vuote della directory deleting
:
$ ls -a deleting/files . .. $ rmdir deleting/files $ ls -l deleting directories
Eliminare un gran numero di file o strutture profonde di directory con molte sottodirectory può sembrare noioso, ma in realtà è semplice. Per impostazione predefinita, rm
funziona solo con file normali. L’opzione -r
è utilizzata per sovrascrivere questo comportamento. Fai attenzione, rm -r
è estremamente pericoloso! Quando usi l’opzione -r
, rm
non solo cancella qualsiasi directory, ma anche tutto ciò che si trova all’interno di quella directory, incluse le sottodirectory e il loro contenuto. Guarda tu stesso come funziona rm -r
:
$ ls copying creating deleting globs moving $ rm deleting rm: cannot remove ‘deleting’: Is a directory $ ls -l deleting total 0 drwxrwxr-x. 2 emma emma 6 Mar 26 14:58 directories $ rm -r deleting $ ls copying creating globs moving
Hai notato come deleting
sia scomparsa, anche se non era vuota? Come mv
, rm
ha un’opzione -i
per chiedere conferma prima di fare qualsiasi cosa. Usa rm -ri
per rimuovere da moving
le directory che non sono più necessarie:
$ find . ./creating ./moving ./moving/dir2 ./moving/dir2/file2 ./moving/dir2/file3 ./moving/dir3 ./moving/dir3/file1 ./globs ./globs/question1 ./globs/question2012 ./globs/question23 ./globs/question13 ./globs/question14 ./globs/star10 ./globs/star1100 ./globs/star2002 ./globs/star2013 ./globs/question15 ./copying ./copying/files ./copying/directories $ rm -ri moving rm: descend into directory ‘moving’? y rm: descend into directory ‘moving/dir2’? y rm: remove regular empty file ‘moving/dir2/file2’? y rm: remove regular empty file ‘moving/dir2/file3’? y rm: remove directory ‘moving/dir2’? y rm: descend into directory ‘moving/dir3’? y rm: remove regular empty file ‘moving/dir3/file1’? y rm: remove directory ‘moving/dir3’? y rm: remove directory ‘moving’? y
Copiare File e Directory
Il comando cp
viene utilizzato per copiare file e directory. Copia alcuni file nella directory copying
:
$ cd ~/linux_essentials-2.4/copying $ ls directories files $ cp /etc/nsswitch.conf files/nsswitch.conf $ cp /etc/issue /etc/hostname files
Se l’ultimo argomento è una directory, cp
crea una copia degli argomenti precedenti all’interno della directory. Come mv
, è possibile specificare più file contemporaneamente, purché la destinazione sia una directory.
Quando entrambi gli operandi di cp
sono file esistenti, cp
sovrascrive il secondo file con una copia del primo file. Facciamo pratica sovrascrivendo il file issue
con il file hostname
:
$ cd ~/linux_essentials-2.4/copying/files $ ls hostname issue nsswitch.conf $ cat hostname mycomputer $ cat issue Debian GNU/Linux 9 \n \l $ cp hostname issue $ cat issue mycomputer
Ora proviamo a creare una copia della directory files
all’interno della directory directories
:
$ cd ~/linux_essentials-2.4/copying $ cp files directories cp: omitting directory ‘files’
Come puoi vedere, cp
, per impostazione predefinita, funziona solo su singoli file. Per copiare una directory, usa l’opzione -r
. Tieni presente che l’opzione -r
farà sì che cp
copi anche il contenuto della directory che stai copiando:
$ cp -r files directories $ find . ./files ./files/nsswitch.conf ./files/fstab ./files/hostname ./directories ./directories/files ./directories/files/nsswitch.conf ./directories/files/fstab ./directories/files/hostname
Hai notato che, quando una directory esistente viene usata come destinazione, cp
crea una copia della directory sorgente al suo interno? Se la destinazione non esiste, viene creata e riempita con il contenuto della directory sorgente:
$ cp -r files files2 $ find . ./files ./files/nsswitch.conf ./files/fstab ./files/hostname ./directories ./directories/files ./directories/files/nsswitch.conf ./directories/files/fstab ./directories/files/hostname ./files2 ./files2/nsswitch.conf ./files2/fstab ./files2/hostname
Globbing
Ciò che viene comunemente chiamato globbing è un semplice linguaggio di corrispondenza di pattern. Le shell a Command Line sui sistemi Linux utilizzano questo linguaggio per fare riferimento a gruppi di file i cui nomi hanno corrispondenza con uno specifico pattern. Lo standard POSIX.1-2017 definisce i seguenti caratteri per la corrispondenza con i pattern:
*
-
Corrisponde a un qualsiasi numero di un qualsiasi carattere, incluso nessun carattere
?
-
Corrisponde a un qualsiasi carattere
[]
-
Corrisponde a una classe di caratteri
Tradotto, questo significa che puoi dire alla tua shell di cercare corrispondenze in base a un pattern invece che in base a una stringa di testo letterale. Di solito gli utenti Linux specificano più file con un glob invece di digitare singolarmente ogni nome di file. Esegui i seguenti comandi:
$ cd ~/linux_essentials-2.4/globs $ ls question1 question14 question2012 star10 star2002 question13 question15 question23 star1100 star2013 $ ls star1* star10 star1100 $ ls star* star10 star1100 star2002 star2013 $ ls star2* star2002 star2013 $ ls star2*2 star2002 $ ls star2013* star2013
La shell espande *
a qualsiasi numero di qualsiasi cosa; quindi la tua shell interpreta star*
come qualsiasi cosa, pertinente al contesto, che inizia con star
. Quando esegui il comando ls star*
, la tua shell non esegue il programma ls
con un argomento star*
, ma cerca i file nella directory corrente che corrispondono al pattern star*
(incluso solo star
) e trasforma ogni file che cha corrispondenza con il pattern in un argomento di ls
:
$ ls star*
Per quanto riguarda ls
, è l’equivalente di
$ ls star10 star1100 star2002 star2013
Il carattere *
non ha alcun significato per ls
. Per dimostrarlo, esegui il seguente comando:
$ ls star\* ls: cannot access star*: No such file or directory
Quando precedi un carattere con \
, stai dicendo alla tua shell di non interpretarlo. In questo caso, vuoi che ls
abbia un argomento star*
invece dell’espansione fatta dal glob star*
.
Il ?
si espande in ogni singolo carattere. Prova i seguenti comandi per testarlo tu stesso:
$ ls question1 question14 question2012 star10 star2002 question13 question15 question23 star1100 star2013 $ ls question? question1 $ ls question1? question13 question14 question15 $ ls question?3 question13 question23 $ ls question13? ls: cannot access question13?: No such file or directory
Le parentesi quadre []
vengono utilizzate per indicare la corrispondenza con intervalli o classi di caratteri. Le parentesi quadre []
funzionano come nelle espressioni regolari POSIX con l’eccezione che i glob usano ^
al posto di !
.
Crea alcuni file con cui sperimentare:
$ mkdir brackets $ cd brackets $ touch file1 file2 file3 file4 filea fileb filec file5 file6 file7
Gli intervalli all’interno delle parentesi quadre []
sono espressi utilizzando un -
:
$ ls file1 file2 file3 file4 file5 file6 file7 filea fileb filec $ ls file[1-2] file1 file2 $ ls file[1-3] file1 file2 file3
È possibile specificare più intervalli:
$ ls file[1-25-7] file1 file2 file5 file6 file7 $ ls file[1-35-6a-c] file1 file2 file3 file5 file6 filea fileb filec
Le parentesi quadre possono essere utilizzate anche per indicare la corrispondenza con un insieme specifico di caratteri.
$ ls file[1a5] file1 file5 filea
Puoi anche usare il carattere ^
come primo carattere per indicare la corrispondenza con qualsiasi valore tranne alcuni caratteri.
$ ls file[^a] file1 file2 file3 file4 file5 file6 file7 fileb filec
Infine, in questa lezione, tratteremo le classi di caratteri. Per indicare la corrispondenza con una classe di caratteri, utilizza [:classname:]
. Per esempio, per utilizzare la classe digit, che corrisponde ai numeri, dovresti fare qualcosa del genere:
$ ls file[[:digit:]] file1 file2 file3 file4 file5 file6 file7 $ touch file1a file11 $ ls file[[:digit:]a] file1 file2 file3 file4 file5 file6 file7 filea $ ls file[[:digit:]]a file1a
Il glob file[[:digit:]a]
, corrisponde a file
seguito da un numero o da una a
.
Le classi di caratteri supportate dipendono dal Locale impostato. POSIX richiede le seguenti classi di caratteri per tutti i Locale:
[:alnum:]
-
Lettere e numeri.
[:alpha:]
-
Lettere maiuscole o minuscole.
[:blank:]
-
Spazi e tabulazioni.
[:cntrl:]
-
Caratteri di controllo, per esempio backspace, campanello, NAK, escape.
[:digit:]
-
Numeri (
0123456789
). [:graph:]
-
Caratteri grafici (tutti i caratteri tranne
ctrl
e il carattere spazio). [:lower:]
-
Lettere minuscole (
a-z
). [:print:]
-
Caratteri stampabili (
alnum
,punct
e il carattere spazio). [:punct:]
-
Caratteri di punteggiatura, per esempio
!
,&
,"
. [:space:]
-
Caratteri spazi bianchi, per esempio tabulazioni, spazi, nuove righe.
[:upper:]
-
Lettere maiuscole (
A-Z
). [:xdigit:]
-
Numeri esadecimali (solitamente
0123456789abcdefABCDEF
).
Esercizi Guidati
-
Tenendo presente quanto sotto riportato, seleziona le directory che verrebbero create con il comando
mkdir -p /tmp/outfiles/text/today /tmp/infiles/text/today
$ pwd /tmp $ find . ./outfiles ./outfiles/text
/tmp
/tmp/outfiles
/tmp/outfiles/text
/tmp/outfiles/text/today
/tmp/infiles
/tmp/infiles/text
/tmp/infiles/text/today
-
Che cosa fa
-v
nei comandimkdir
,rm
ecp
? -
Che cosa succede se si tenta accidentalmente di copiare tre file sulla stessa Command Line in un file già esistente anziché in una directory?
-
Che cosa succede quando usi
mv
per spostare una directory dentro se stessa? -
Come potresti eliminare tutti i file nella directory corrente che iniziano con
old
? -
Quale dei seguenti file corrisponde a
log_[a-z]_201?_*_01.txt
?log_3_2017_Jan_01.txt
log_+_2017_Feb_01.txt
log_b_2007_Mar_01.txt
log_f_201A_Wednesday_01.txt
-
Indica alcuni glob che abbiano corrispondenza con tutti i file in elenco:
doc100 doc200 doc301 doc401
Esercizi Esplorativi
-
Usa la pagina man di
cp
per scoprire come fare la copia di un file mantenendo i permessi e la data di modifica del file originale. -
Che cosa fa il comando
rmdir -p
? Provalo e spiega come si differenzia darm -r
. -
NON ESEGUIRE REALMENTE QUESTO COMANDO: Cosa pensi che farebbe
rm -ri /*
? (SUL SERIO, NON PROVARE A ESEGUIRLO!) -
Oltre a usare
-i
, è possibile impedire amv
di sovrascrivere i file di destinazione? -
Spiega il comando
cp -u
.
Sommario
L’ambiente Linux a Command Line fornisce strumenti per gestire i file. Alcuni di uso comune sono: cp
, mv
, mkdir
, rm
e rmdir
. Questi strumenti, combinati con i glob, consentono agli utenti di svolgere tante attività in tempi molto brevi.
Molti comandi hanno un’opzione -i
, che chiede conferma prima di fare qualsiasi cosa. Questa conferma può evitarti molti problemi se hai digitato qualcosa di sbagliato.
Molti comandi hanno un’opzione -r
. L’opzione -r
di solito significa ricorsione. In matematica e informatica una funzione ricorsiva è una funzione che utilizza se stessa nella sua definizione. Quando si tratta di strumenti a Command Line di solito significa applicare il comando a una directory e a tutto ciò che contiene.
Comandi utilizzati in questa lezione:
cat
-
Legge e visualizza il contenuto di un file.
cp
-
Copia file o directory.
echo
-
Produce una stringa come output.
find
-
Attraversa un albero del file system e cerca i file che corrispondono a un insieme specifico di criteri.
ls
-
Mostra le proprietà di file e directory ed elenca il contenuto di una directory.
mkdir
-
Crea nuove directory.
mv
-
Sposta o rinomina file o directory.
pwd
-
Visualizza la directory di lavoro corrente.
rm
-
Elimina file o directory.
rmdir
-
Elimina directory.
touch
-
Crea nuovi file vuoti o aggiorna il timestamp di modifica di un file esistente.
Risposte agli Esercizi Guidati
-
Tenendo presente quanto sotto riportato, seleziona le directory che verrebbero create con il comando
mkdir -p /tmp/outfiles/text/today /tmp/infiles/text/today
$ pwd /tmp $ find . ./outfiles ./outfiles/text
Verranno create le directory contrassegnate. Le directory
/tmp
,/tmp/outfiles
e/tmp/outfiles/text
esistono già; quindimkdir
le ignorerà./tmp
/tmp/outfiles
/tmp/outfiles/text
/tmp/outfiles/text/today
X
/tmp/infiles
X
/tmp/infiles/text
X
/tmp/infiles/text/today
X
-
Che cosa fa
-v
nei comandimkdir
,rm
ecp
?Normalmente,
-v
attiva l’output dettagliato. Fa in modo che i rispettivi programmi visualizzino ciò che stanno facendo nel momento in cui lo fanno:$ rm -v a b removed 'a' removed 'b' $ mv -v a b 'a' -> 'b' $ cp -v b c 'b' -> 'c'
-
Che cosa succede se si tenta accidentalmente di copiare tre file sulla stessa Command Line in un file già esistente anziché in una directory?
cp
si rifiuterà di fare qualsiasi cosa e mostrerà un messaggio di errore:$ touch a b c d $ cp a b c d cp: target 'd' is not a directory
-
Che cosa succede quando usi
mv
per spostare una directory dentro se stessa?Viene visualizzato un messaggio di errore che dice che
mv
non può farlo.$ mv a a mv: cannot move 'a' to a subdirectory of itself, 'a/a'
-
Come potresti eliminare tutti i file nella directory corrente che iniziano con
old
?Dovresti usare il glob
old*
con il comandorm
:$ rm old*
-
Quale dei seguenti file corrisponde a
log_[a-z]_201?_*_01.txt
?log_3_2017_Jan_01.txt
log_+_2017_Feb_01.txt
log_b_2007_Mar_01.txt
log_f_201A_Wednesday_01.txt
X
$ ls log_[a-z]_201?_*_01.txt log_f_201A_Wednesday_01.txt
log_[a-z]
corrisponde alog_
seguito da una qualsiasi lettera minuscola; quindi ha corrispondenza sia conlog_f_201A_Wednesday_01.txt
che conlog_b_2007_Mar_01.txt
._201?
corrisponde a un qualunque carattere singolo dopo_201
; quindi ha corrispondenza solo conlog_f_201A_Wednesday_01.txt
. Infine*_01.txt
corrisponde a tutto ciò che finisce con_01.txt
; quindi ha corrispondenza con l’opzione che è rimasta. -
Indica alcuni glob che abbiano corrispondenza con tutti i file in elenco:
doc100 doc200 doc301 doc401
Esistono diverse soluzioni. Eccone alcune:
doc* doc[1-4]* doc?0? doc[1-4]0?
Risposte agli Esercizi Esplorativi
-
Usa la pagina man di
cp
per scoprire come fare la copia di un file mantenendo i permessi e la data di modifica del file originale.Dovresti usare l’opzione
-p
. Dalla pagina man:$ man cp -p same as --preserve=mode,ownership,timestamps --preserve[=ATTR_LIST] preserve the specified attributes (default: mode,ownership,time‐ stamps), if possible additional attributes: context, links, xattr, all
-
Che cosa fa il comando
rmdir -p
? Provalo e spiega come si differenzia darm -r
.Fa sì che
rmdir
si comporti in modo simile amkdir -p
. Se gli viene passato un albero di directory vuote, le rimuoverà tutte.$ find . ./a ./a/b ./a/b/c $ rmdir -p a/b/c $ ls
-
NON ESEGUIRE REALMENTE QUESTO COMANDO: Cosa pensi che farebbe
rm -ri /*
? (SUL SERIO, NON PROVARE A ESEGUIRLO!)Rimuoverà tutti i file e le directory scrivibili dal tuo account utente. Ciò include qualsiasi file system di rete.
-
Oltre a usare
-i
, è possibile impedire amv
di sovrascrivere i file di destinazione?Sì, l’opzione
-n
o--no-clobber
impedisce amv
di sovrascrivere i file.$ cat a a $ cat b b $ mv -n a b $ cat b b
-
Spiega il comando
cp -u
.L’opzione
-u
fa in modo checp
copi un file solo se la destinazione non esiste o se è più vecchia del file sorgente.$ ls -l total 24K drwxr-xr-x 123 emma student 12K Feb 2 05:34 .. drwxr-xr-x 2 emma student 4.0K Feb 2 06:56 . -rw-r--r-- 1 emma student 2 Feb 2 06:56 a -rw-r--r-- 1 emma student 2 Feb 2 07:00 b $ cat a a $ cat b b $ cp -u a b $ cat b b $ cp -u a c $ ls -l total 12 -rw-r--r-- 1 emma student 2 Feb 2 06:56 a -rw-r--r-- 1 emma student 2 Feb 2 07:00 b -rw-r--r-- 1 emma student 2 Feb 2 07:00 c