GNU/Linux >> Linux Esercitazione >  >> Linux

Come spostare un file in Linux

Spostare file in Linux può sembrare relativamente semplice, ma ci sono più opzioni disponibili di quanto molti pensino. Questo articolo insegna ai principianti come spostare i file nella GUI e sulla riga di comando, ma spiega anche cosa sta effettivamente 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 sposta 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. Puoi cosa inode mappare su un file con il comando ls:

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

Quando sposti un file, in realtà non sposti i dati da un inode all'altro, ma assegni solo all'oggetto file un nuovo nome o percorso del file. In effetti, un file mantiene le sue autorizzazioni quando viene spostato, perché lo spostamento di un file non lo cambia né lo ricrea.

Gli inode di file e directory non implicano mai ereditarietà e sono dettati dal filesystem stesso. L'assegnazione degli inode è sequenziale in base a quando è stato creato il file ed è completamente indipendente da come organizzi il tuo computer. Un file "all'interno" di una directory può avere un numero di inode inferiore rispetto alla directory principale o uno 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 all'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 tu 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 è incentrato sullo spostamento di file da una directory all'altra.

Muoversi con il mouse

La GUI è uno strato di astrazione amichevole e, per la maggior parte delle persone, familiare su una complessa raccolta di dati binari. È anche il primo e più intuitivo modo per spostare 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 anziché copiarlo, quindi è probabilmente una delle azioni più intuitive sul desktop:

Il file manager Dolphin nel desktop KDE Plasma richiede automaticamente all'utente di eseguire un'azione. Tenendo premuto il Maiusc durante il trascinamento di un file forza un'azione di spostamento:

Spostarsi sulla riga di comando

Il terminale Linux

  • I 7 migliori emulatori di terminale per Linux
  • 10 strumenti da riga di comando per l'analisi dei dati in Linux
  • Scarica ora:cheat sheet SSH
  • Cheat sheet sui comandi avanzati di Linux
  • Esercitazioni sulla riga di comando di Linux

Il comando della shell destinato allo spostamento di file su Linux, BSD, Illumos, Solaris e MacOS è mv . Un semplice comando con una sintassi prevedibile, mv sposta un file di origine nella destinazione specificata, ciascuna definita da un percorso 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 alla tua attenzione alcuni utili modificatori, sia che tu sia nuovo o esperto.

Non tutti i mv i comandi sono stati scritti dalle stesse persone, quindi potresti avere GNU mv , BSD mv o Sun mv , a seconda del tuo sistema operativo. Le opzioni di comando differiscono da implementazione a implementazione (BSD mv non ha opzioni lunghe) quindi fai riferimento al tuo mv pagina man 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 , ricorda la sintassi mv . Ad esempio, per spostare il file example.txt nei tuoi Documenti directory:

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

Proprio come quando sposti un file trascinandolo sull'icona di una cartella, questo comando non sostituisce Documenti con esempio.txt . Invece, mv rileva quei Documenti è una cartella e inserisce example.txt file in esso.

Puoi anche, comodamente, rinominare il file mentre lo sposti:

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

Questo è importante perché ti consente di rinominare un file anche quando non vuoi spostarlo in un'altra posizione, in questo modo:

$ touch example.txt
$ mv example.txt foo2.txt
$ ls
foo2.txt

Spostare una directory

Il mv comando non differenzia un file da una directory nel modo in cui cp fa. Puoi 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 copi un file in una directory in cui esiste già un file con lo stesso nome, mv Il comando sostituisce il file di destinazione con quello che stai spostando, per impostazione predefinita. Questo comportamento è chiamato clobbering , e a volte è esattamente quello che intendi. Altre volte, non lo è.

Alcune distribuzioni alias (o potresti scriverne uno tuo) mv a mv --interactive , che richiede conferma. Alcuni no. In ogni caso, puoi utilizzare il --interattivo o -i opzione per garantire che mv chiede 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 --no-clobber o -n invece. Questo flag rifiuta silenziosamente l'azione di spostamento in caso di conflitto. In questo esempio, un file denominato example.txt esiste già in ~/Documents , quindi non viene spostato dalla directory corrente come indicato:

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

Spostarsi con i backup

Se stai usando GNU mv , ci sono opzioni di backup che offrono un altro mezzo per muoversi in sicurezza. Per creare un backup di qualsiasi file di destinazione in conflitto, utilizza -b opzione:

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

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

Un'altra opzione di backup GNU è --backup , che accetta un argomento che definisce come viene chiamato il file di backup:

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

Ad esempio:

$ mv --backup=numbered example.txt ~/Documents
$ ls ~/Documents
-rw-rw-r--. 1 seth users 128 Aug  1 17:23 example.txt
-rw-rw-r--. 1 seth users 128 Aug  1 17:20 example.txt.~1~

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

$ VERSION_CONTROL=numbered mv --backup example.txt ~/Documents
$ ls ~/Documents
-rw-rw-r--. 1 seth users 128 Aug  1 17:23 example.txt
-rw-rw-r--. 1 seth users 128 Aug  1 17:20 example.txt.~1~
-rw-rw-r--. 1 seth users 128 Aug  1 17:22 example.txt.~2~

Il --backup l'opzione rispetta ancora --interactive o -i opzione, quindi ti chiede ancora di sovrascrivere il file di destinazione, anche se crea un backup prima di farlo:

$ mv --backup=numbered example.txt ~/Documents
mv: overwrite '~/Documents/example.txt'? y
$ ls ~/Documents
-rw-rw-r--. 1 seth users 128 Aug  1 17:24 example.txt
-rw-rw-r--. 1 seth users 128 Aug  1 17:20 example.txt.~1~
-rw-rw-r--. 1 seth users 128 Aug  1 17:22 example.txt.~2~
-rw-rw-r--. 1 seth users 128 Aug  1 17:23 example.txt.~3~

Puoi sostituire -i con la --force o -f opzione.

$ mv --backup=numbered --force example.txt ~/Documents
$ ls ~/Documents
-rw-rw-r--. 1 seth users 128 Aug  1 17:26 example.txt
-rw-rw-r--. 1 seth users 128 Aug  1 17:20 example.txt.~1~
-rw-rw-r--. 1 seth users 128 Aug  1 17:22 example.txt.~2~
-rw-rw-r--. 1 seth users 128 Aug  1 17:24 example.txt.~3~
-rw-rw-r--. 1 seth users 128 Aug  1 17:25 example.txt.~4~

Il --backup l'opzione non è disponibile in BSD mv .

Spostamento di più file contemporaneamente

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

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

Se l'elemento 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 sei in grado di fornire il mv comando con la destinazione come argomento finale, usa la --target-directory o -t opzione:

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

Ciò è particolarmente utile quando si costruisce mv comandi dall'output di qualche altro comando, come trova comando, xargs o GNU Parallel.

Spostamento in base a mtime

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

$ ls -l ~/Documents
-rw-rw-r--. 1 seth users 128 Aug  1 17:32 example.txt
$ ls -l
-rw-rw-r--. 1 seth users 128 Aug  1 17:42 example.txt
$ mv --update example.txt ~/Documents
$ ls -l ~/Documents
-rw-rw-r--. 1 seth users 128 Aug  1 17:42 example.txt
$ ls -l

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

$ cat example.txt
one
$ cat ~/Documents/example.txt
one
two
$ touch example.txt
$ mv --update example.txt ~/Documents
$ cat ~/Documents/example.txt
one

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

Trasloco

Esistono più modi per spostare i dati oltre a mv comando, ma come programma predefinito per il lavoro, mv è una buona opzione universale. Ora che sai quali opzioni hai a disposizione, puoi utilizzare mv più intelligente che mai.


Linux
  1. Come gestire le capacità dei file Linux

  2. Come trovare un file in Linux

  3. Come svuotare un file di registro in Linux

  4. Come montare un file iso in Linux

  5. Come controllare l'accesso ai file su Linux

Come rinominare uno o più file in Linux

Come collegare simbolicamente un file in Linux

Come crittografare file su Linux

Come disabilitare lo scambio in Linux

Come usare gzip in Linux?

Come comprimere un file in Linux