Spostare i file in Linux può sembrare relativamente semplice, ma ci sono più opzioni disponibili di quanto la maggior parte si renda conto. Questo articolo insegna ai principianti come spostare i file nella GUI e sulla riga di comando, ma spiega anche cosa sta realmente accadendo sotto il cofano e affronta le opzioni della riga di comando che molti utenti esperti hanno raramente esplorato.

Spostare cosa?

Prima di approfondire lo spostamento dei file, vale la pena dare un’occhiata più da vicino a ciò che accade effettivamente quando si spostano gli oggetti del file system., Quando un file viene creato, viene assegnato a un inode, che è un punto fisso in un file system utilizzato per l’archiviazione dei dati. È possibile mappare l’inode a un file con il comando ls:

$ ls --inode example.txt
7344977 example.txt

Quando si sposta un file, in realtà non si spostano i dati da un inode a un altro, si assegna all’oggetto file solo un nuovo nome o percorso del file. Infatti, un file mantiene le sue autorizzazioni quando viene spostato, perché lo spostamento di un file non cambia o ricrearlo.

Gli inode di file e directory non implicano mai l’ereditarietà e sono dettati dal filesystem stesso., L’assegnazione inode è sequenziale in base al momento in cui il file è stato creato ed è completamente indipendente da come si organizza il computer. Un file “all’interno” di una directory può avere un numero di inode inferiore rispetto alla directory principale o superiore. Ad esempio:

$ mkdir foo
$ mv example.txt foo
$ ls --inode
7476865 foo
$ ls --inode foo
7344977 example.txt

Quando si sposta un file da un disco rigido a un altro, tuttavia, è molto probabile che l’inode cambi. Ciò accade perché i nuovi dati devono essere scritti su un nuovo filesystem. Per questo motivo, in Linux l’atto di spostare e rinominare i file è letteralmente la stessa azione., Sia che si sposti un file in un’altra directory o nella stessa directory con un nuovo nome, entrambe le azioni vengono eseguite dallo stesso programma sottostante.

Questo articolo si concentra sullo spostamento di file da una directory all’altra.

Muoversi con il mouse

La GUI è un livello di astrazione amichevole e, per la maggior parte delle persone, familiare in cima a una complessa raccolta di dati binari. E ‘ anche il primo e più intuitivo modo per spostare i file su Linux. Se sei abituato all’esperienza desktop, in senso generico, probabilmente sai già come spostare i file sul tuo disco rigido., Nel desktop GNOME, ad esempio, l’azione predefinita quando si trascina e rilascia un file da una finestra all’altra è spostare il file piuttosto che copiarlo, quindi è probabilmente una delle azioni più intuitive sul desktop:

Il file manager Dolphin nel desktop Plasma di KDE richiede di default all’utente un’azione. Tenendo premuto il tasto Maiusc mentre si trascina un file si forza un’azione di spostamento:

Spostamento sulla riga di comando

Il comando shell destinato allo spostamento di file su Linux, BSD, Illumos, Solaris e macOS è mv., Un semplice comando con una sintassi prevedibile, mv<source><destination> sposta un file sorgente nella destinazione specificata, ciascuna definita da un percorso di file assoluto o relativo. Come accennato in precedenza, mv è un comando così comune per gli utenti POSIX che molti dei suoi modificatori aggiuntivi sono generalmente sconosciuti, quindi questo articolo porta alcuni modificatori utili alla tua attenzione, sia che tu sia nuovo o esperto.,

Non tutti i comandi mv sono stati scritti dalle stesse persone, quindi potresti avere GNU mv, BSD mv o Sun mv, a seconda del tuo sistema operativo. Le opzioni dei comandi differiscono da implementazione a implementazione (BSD mv non ha opzioni lunghe), quindi fai riferimento alla tua pagina man mv per vedere cosa è supportato o installa invece la tua versione preferita (questo è il lusso dell’open source).,

Spostamento di un file

Per spostare un file da una cartella all’altra con mv, a ricordare la sintassi mv <fonte> <destinazione>. Ad esempio, per spostare l’esempio di file.txt nella directory Documenti:

$ touch example.txt
$ mv example.txt ~/Documents
$ ls ~/Documents
example.txt

Proprio come quando si sposta un file trascinandolo e rilasciandolo sull’icona di una cartella, questo comando non sostituisce Documenti con esempio.txt. Invece, mv rileva che Documents è una cartella e inserisce l’esempio.file txt in esso.,

È anche possibile, comodamente, rinominare il file come si sposta:

$ touch example.txt
$ mv example.txt ~/Documents/foo.txt
$ ls ~/Documents
foo.txt

questo è importante perché consente di rinominare un file anche quando non si desidera spostare in un’altra posizione, in questo modo:

$ touch example.txt$ mv example.txt foo2.txt$ lsfoo2.txt

Spostamento di una directory

Il comando mv non è possibile distinguere un file da una directory il modo in cp non., È possibile spostare una directory o un file con la stessa sintassi:

$ touch file.txt
$ mkdir foo_directory
$ mv file.txt foo_directory
$ mv foo_directory ~/Documents

Spostare un file in modo sicuro

Se si copia un file in una directory in cui esiste già un file con lo stesso nome, il comando mv sostituisce il file di destinazione con quello che si sta spostando, per impostazione predefinita. Questo comportamento è chiamato clobbering, e talvolta è esattamente ciò che si intende. Altre volte, non lo è.

Alcune distribuzioni alias (o si potrebbe scrivere il proprio) mv a mv interactive interactive, che richiede la conferma. Alcuni non lo fanno., In entrambi i casi, puoi usare l’opzione interactive interactive or-i per assicurarti che mv chieda conferma nel caso in cui due file con lo stesso nome siano in conflitto:

$ mv --interactive example.txt ~/Documents
mv: overwrite '~/Documents/example.txt'?

Se non vuoi intervenire manualmente, usa invece no no-clobber o-n. Questo flag rifiuta silenziosamente l’azione di spostamento in caso di conflitto. In questo esempio, un file denominato esempio.,txt esiste già in ~ / Documents, quindi non viene spostato dalla directory corrente come indicato:

$ mv --no-clobber example.txt ~/Documents
$ ls
example.txt

Spostamento con i backup

Se stai usando GNU mv, ci sono opzioni di backup che offrono un altro mezzo di spostamento sicuro. Per creare un backup di qualsiasi file di destinazione in conflitto, utilizzare l’opzione-b:

$ mv -b example.txt ~/Documents
$ ls ~/Documents
example.txt example.txt~

Questo flag garantisce che mv completi l’azione di spostamento, ma protegge anche qualsiasi file preesistente nella posizione di destinazione.,

Un’altra opzione di backup GNU è backup backup, che prende un argomento che definisce come viene chiamato il file di backup:

  • esistente: se i backup numerati esistono già nella destinazione, viene creato un backup numerato. Altrimenti, viene utilizzato lo schema semplice.
  • none: non crea un backup anche se backup backup è impostato. Questa opzione è utile per sovrascrivere un alias mv che imposta l’opzione di backup.
  • numerato: aggiunge al file di destinazione un numero.,
  • semplice: Aggiunge il file di destinazione con un~, che può essere comodamente nascosto dalla vista giornaliera con l’opzione ignore ignore-backup per ls.

Ad esempio:

È possibile impostare uno schema di backup predefinito con la variabile d’ambiente VERSION_CONTROL. È possibile impostare le variabili di ambiente nel vostro ~/.file bashrc o dinamicamente prima del tuo comando:

L’opzione backup backup rispetta ancora l’opzione interactive interactive or-i, quindi ti chiede comunque di sovrascrivere il file di destinazione, anche se crea un backup prima di farlo:

Puoi sovrascrivere-i con l’opzione force force or-f.,

L’opzione backup backup non è disponibile in BSD mv.

Spostamento di file in una sola volta

Quando si spostano più file, mv tratta finale directory denominata come destinazione:

$ mv foo bar baz ~/Documents
$ ls ~/Documents
foo bar baz

Se il prodotto finale non è una directory, mv restituisce un errore:

$ mv foo bar baz
mv: target 'baz' is not a directory

La sintassi di GNU mv è abbastanza flessibile., Se non si è in grado di fornire il comando mv con la destinazione come argomento finale, utilizzare l’opzione target target-directory o-t:

$ mv --target-directory=~/Documents foo bar baz
$ ls ~/Documents
foo bar baz

Questo è particolarmente utile quando si costruiscono comandi mv dall’output di qualche altro comando, come il comando find, xargs o GNU Parallel.

Spostamento basato su mtime

Con GNU mv, è possibile definire un’azione di spostamento in base al fatto che il file spostato sia più recente del file di destinazione che sostituirebbe., Questa opzione è possibile con l’opzione update update o-u, e non è disponibile in BSD mv:

Questo risultato si basa esclusivamente sul tempo di modifica dei file, non su un diff dei due file, quindi usalo con cura. È facile ingannare mv con un semplice comando touch:

Ovviamente, questa non è la funzione di aggiornamento più intelligente disponibile, ma offre una protezione di base contro la sovrascrittura dei dati recenti.

Moving

Ci sono più modi per spostare i dati che solo il comando mv, ma come programma predefinito per il lavoro, mv è una buona opzione universale., Ora che sapete quali opzioni avete a disposizione, è possibile utilizzare mv più intelligente che mai.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *