Provo a inserire un /
finale sul bersaglio.
Se commetto un errore e l'origine e la destinazione sono entrambi file anziché directory, aggiungo /
significa che riceverò un errore; senza il /
ostruirà il file di destinazione.
(Il completamento della tabulazione di solito aggiunge il /
finale comunque, quindi di solito è più facile aggiungerlo che no.)
Vedi la risposta di Volker Siegel per maggiori dettagli.
Nessuna barra finale nella directory di origine
Non dovresti inserire una barra finale nella directory di origine:
Il punto è rilevante per cp
- ma anche a mv
, dove è molto più importante .
Citerò l'avviso dal manuale - nota che non si trova nella pagina man, ma nella pagina delle informazioni info coreutils 'mv invocation'
:
Avviso :evitare di specificare un nome di origine con una barra finale, quando potrebbe essere un collegamento simbolico a una directory. Altrimenti, 'mv' potrebbe fare qualcosa di molto sorprendente, dal momento che il suo comportamento dipende dalla chiamata di sistema di ridenominazione sottostante. Su un sistema con un moderno kernel basato su Linux, fallisce con 'errno=ENOTDIR'. Tuttavia, su altri sistemi (almeno FreeBSD 6.1 e Solaris 10) rinomina silenziosamente non il collegamento simbolico ma piuttosto la directory a cui fa riferimento il collegamento simbolico.
Usa le barre finali sulla directory di destinazione
Se desideri spostare file e directory in una directory, devi aggiungere una barra finale alla directory di destinazione.
Non cambia nulla finché tutto va bene.
Ma può salvarti da un errore comune che causa la perdita o la modifica dei dati:
Se sposti un file in una directory, ci sono due cose che possono andare storte:
Potresti aver digitato in modo errato l'ultimo componente del nome della directory di destinazione, come un carattere sbagliato. Due delle cose che possono accadere sono questi due casi:
-
Se il nome scritto in modo errato non esistono:
-
il file verrà rinominato con il nome errato
-
viene spostato nella directory principale della destinazione prevista
-
Quindi non finisce né dove era, né dove ti aspetti che vada.
-
-
Se il nome scritto in modo errato fa esiste ed è un file:
-
il file sovrascriverà il file con il nome errato, nella directory principale della destinazione.
-
Ancora una volta, non lo troverai dov'era, o dove dovrebbe essere:è semplicemente svanito.
-
Se utilizzi una barra finale nella directory di destinazione, entrambi i casi vengono evitati:
Fa mv
non usarlo come nome di file quando normalmente lo farebbe. Invece, mv
dà solo un errore:
mv: failed to access ‘foo/’: Not a directory
Rimuovi automaticamente le barre
C'è un'opzione speciale per cp
e mv
per mitigare il rischio rimuovendo sempre la barra dalle directory src:
Some GNU programs (at least `cp' and `mv') allow you to remove any
trailing slashes from each SOURCE argument before operating on it. The
`--strip-trailing-slashes' option enables this behavior.
This is useful when a SOURCE argument may have a trailing slash and
specify a symbolic link to a directory. This scenario is in fact rather
common because some shells can automatically append a trailing slash
when performing file name completion on such symbolic links. Without
this option, `mv', for example, (via the system's rename function) must
interpret a trailing slash as a request to dereference the symbolic link
and so must rename the indirectly referenced _directory_ and not the
symbolic link. Although it may seem surprising that such behavior be
the default, it is required by POSIX and is consistent with other parts
of that standard.