GNU/Linux >> Tutoriels Linux >  >> Linux

Comment déplacer un fichier sous Linux

Déplacer des fichiers sous Linux peut sembler relativement simple, mais il y a plus d'options disponibles que la plupart ne le pensent. Cet article enseigne aux débutants comment déplacer des fichiers dans l'interface graphique et sur la ligne de commande, mais explique également ce qui se passe réellement sous le capot et aborde les options de ligne de commande que de nombreux utilisateurs expérimentés ont rarement explorées.

Déménager quoi ?

Avant de se plonger dans le déplacement de fichiers, il vaut la peine d'examiner de plus près ce qui se passe réellement lors du déplacement objets du système de fichiers. Lorsqu'un fichier est créé, il est affecté à un inode , qui est un point fixe dans un système de fichiers utilisé pour le stockage de données. Vous pouvez déterminer quel inode correspond à un fichier avec la commande ls :

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

Lorsque vous déplacez un fichier, vous ne déplacez pas réellement les données d'un inode à un autre, vous attribuez simplement à l'objet fichier un nouveau nom ou un nouveau chemin de fichier. En fait, un fichier conserve ses autorisations lorsqu'il est déplacé, car le déplacement d'un fichier ne le modifie ni ne le recrée.

Les inodes de fichiers et de répertoires n'impliquent jamais d'héritage et sont dictés par le système de fichiers lui-même. L'affectation des inodes est séquentielle en fonction du moment où le fichier a été créé et est entièrement indépendante de la façon dont vous organisez votre ordinateur. Un fichier "à l'intérieur" d'un répertoire peut avoir un numéro d'inode inférieur à celui de son répertoire parent, ou supérieur. Par exemple :

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

Cependant, lors du déplacement d'un fichier d'un disque dur à un autre, l'inode est très susceptible de changer. Cela se produit parce que les nouvelles données doivent être écrites sur un nouveau système de fichiers. Pour cette raison, sous Linux, le fait de déplacer et de renommer des fichiers est littéralement la même action. Que vous déplaciez un fichier vers un autre répertoire ou vers le même répertoire avec un nouveau nom, les deux actions sont effectuées par le même programme sous-jacent.

Cet article se concentre sur le déplacement de fichiers d'un répertoire à un autre.

Se déplacer avec une souris

L'interface graphique est une couche d'abstraction conviviale et, pour la plupart des gens, familière au-dessus d'une collection complexe de données binaires. C'est aussi le premier et le plus intuitif moyen de déplacer des fichiers sous Linux. Si vous êtes habitué à l'expérience de bureau, dans un sens générique, vous savez probablement déjà comment déplacer des fichiers sur votre disque dur. Dans le bureau GNOME, par exemple, l'action par défaut lors du glisser-déposer d'un fichier d'une fenêtre à une autre est de déplacer le fichier plutôt que de le copier, c'est donc probablement l'une des actions les plus intuitives sur le bureau :

Par défaut, le gestionnaire de fichiers Dolphin du bureau KDE Plasma invite l'utilisateur à effectuer une action. Maintenir le Shift touche tout en faisant glisser un fichier force une action de déplacement :

Déplacement sur la ligne de commande

Le Terminal Linux

  • Les 7 meilleurs émulateurs de terminaux pour Linux
  • 10 outils de ligne de commande pour l'analyse de données sous Linux
  • Télécharger maintenant :Aide-mémoire SSH
  • Aide-mémoire des commandes Linux avancées
  • Tutoriels de ligne de commande Linux

La commande shell destinée au déplacement de fichiers sur Linux, BSD, Illumos, Solaris et MacOS est mv . Une commande simple avec une syntaxe prévisible, mv déplace un fichier source vers la destination spécifiée, chacune étant définie par un chemin de fichier absolu ou relatif. Comme mentionné précédemment, mv est une commande si courante pour les utilisateurs de POSIX que bon nombre de ses modificateurs supplémentaires sont généralement inconnus. Cet article attire donc votre attention sur quelques modificateurs utiles, que vous soyez nouveau ou expérimenté.

Pas tous les mv les commandes ont été écrites par les mêmes personnes, donc vous pouvez avoir GNU mv , BSD mv , ou Soleil mv , selon votre système d'exploitation. Les options de commande diffèrent d'une implémentation à l'autre (BSD mv n'a pas du tout d'options longues), alors référez-vous à votre mv man page pour voir ce qui est pris en charge, ou installez votre version préférée à la place (c'est le luxe de l'open source).

Déplacer un fichier

Pour déplacer un fichier d'un dossier à un autre avec mv , souvenez-vous de la syntaxe mv . Par exemple, pour déplacer le fichier example.txt dans vos Documents répertoire :

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

Tout comme lorsque vous déplacez un fichier en le faisant glisser et en le déposant sur une icône de dossier, cette commande ne remplace pas Documents avec exemple.txt . Au lieu de cela, mv détecte que Documents est un dossier, et place le example.txt déposer dedans.

Vous pouvez également, de manière pratique, renommer le fichier au fur et à mesure que vous le déplacez :

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

C'est important car cela vous permet de renommer un fichier même lorsque vous ne voulez pas le déplacer vers un autre emplacement, comme ceci :

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

Déplacer un répertoire

Le mv la commande ne différencie pas un fichier d'un répertoire comme cp Est-ce que. Vous pouvez déplacer un répertoire ou un fichier avec la même syntaxe :

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

Déplacer un fichier en toute sécurité

Si vous copiez un fichier dans un répertoire où un fichier du même nom existe déjà, le mv La commande remplace le fichier de destination par celui que vous déplacez, par défaut. Ce comportement est appelé clobbering , et parfois c'est exactement ce que vous avez l'intention de faire. D'autres fois, ce n'est pas le cas.

Certaines distributions alias (ou vous pouvez écrire le vôtre) mv à mv --interactive , qui vous invite à confirmer. Certains ne le font pas. Dans tous les cas, vous pouvez utiliser le --interactif ou -i option pour s'assurer que mv demande confirmation en cas de conflit entre deux fichiers de même nom :

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

Si vous ne souhaitez pas intervenir manuellement, utilisez --no-clobber ou -n Au lieu. Ce drapeau rejette silencieusement l'action de déplacement en cas de conflit. Dans cet exemple, un fichier nommé example.txt existe déjà dans ~/Documents , afin qu'il ne soit pas déplacé du répertoire actuel comme indiqué :

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

Déplacement avec sauvegardes

Si vous utilisez GNU mv , il existe des options de sauvegarde offrant un autre moyen de se déplacer en toute sécurité. Pour créer une sauvegarde de tout fichier de destination en conflit, utilisez le -b choix :

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

Cet indicateur garantit que mv termine l'action de déplacement, mais protège également tout fichier préexistant à l'emplacement de destination.

Une autre option de sauvegarde GNU est --backup , qui prend un argument définissant le nom du fichier de sauvegarde :

  • existant :Si des sauvegardes numérotées existent déjà dans la destination, une sauvegarde numérotée est créée. Sinon, le simple schéma est utilisé.
  • aucun  :Ne crée pas de sauvegarde même si --backup est défini. Cette option est utile pour remplacer un mv alias qui définit l'option de sauvegarde.
  • numéroté :Ajoute un numéro au fichier de destination.
  • simple :ajoute le fichier de destination avec un ~ , qui peut facilement être masqué de votre vue quotidienne avec le --ignore-backups option pour ls .

Par exemple :

$ mv --backup=numbered example.txt ~/Documents
$ ls ~/Documents
-rw-rw-r--. 1 sept utilisateurs 128 1er août 17:23 example.txt
-rw-rw-r--. 1 sept utilisateurs 128 1er août 17:20 example.txt.~1~

Un modèle de sauvegarde par défaut peut être défini avec la variable d'environnement VERSION_CONTROL. Vous pouvez définir des variables d'environnement dans votre ~/.bashrc fichier ou dynamiquement avant votre commande :

$ VERSION_CONTROL=numéroté mv --backup example.txt ~/Documents
$ ls ~/Documents
-rw-rw-r--. 1 sept utilisateurs 128 1er août 17:23 example.txt
-rw-rw-r--. 1 seth users 128 Aug  1 17:20 example.txt.~1~
-rw-rw-r--. 1 sept utilisateurs 128 1er août 17:22 example.txt.~2~

La --sauvegarde l'option respecte toujours le --interactive ou -i afin qu'il vous invite toujours à écraser le fichier de destination, même s'il crée une sauvegarde avant de le faire :

$ mv --backup=numbered example.txt ~/Documents
mv :écraser '~/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 set utilisateurs 128 1er août 17:23 example.txt.~3~

Vous pouvez remplacer -i avec la --force ou -f option.

$ 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 sept utilisateurs 128 1er août 17:24 example.txt.~3~
-rw-rw-r--. 1 sept utilisateurs 128 1er août 17:25 example.txt.~4~

La --sauvegarde l'option n'est pas disponible dans BSD mv .

Déplacer plusieurs fichiers à la fois

Lors du déplacement de plusieurs fichiers, mv traite le répertoire final nommé comme destination :

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

Si l'élément final n'est pas un répertoire, mv renvoie une erreur :

$ mv foo bar baz
mv :la cible 'baz' n'est pas un répertoire

La syntaxe de GNU mv est assez souple. Si vous n'êtes pas en mesure de fournir le mv commande avec la destination comme argument final, utilisez le --target-directory ou -t choix :

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

Ceci est particulièrement utile lors de la construction de mv commandes à partir de la sortie d'une autre commande, telle que find commande, xargs , ou GNU Parallèle.

Déplacement basé sur mtime

Avec GNU mv , vous pouvez définir une action de déplacement selon que le fichier déplacé est plus récent que le fichier de destination qu'il remplacerait. Cette option est possible avec le --update ou -u option, et n'est pas disponible dans 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 utilisateurs 128 1er août 17:42 example.txt
$ mv --update example.txt ~/Documents
$ ls -l ~/Documents
-rw-rw-r-- . 1 seth users 128 1 août 17:42 example.txt
$ ls -l

Ce résultat est exclusivement basé sur l'heure de modification des fichiers, et non sur une différence entre les deux fichiers, utilisez-le donc avec précaution. Il est facile de tromper mv d'un simple toucher commande :

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

Évidemment, ce n'est pas la fonction de mise à jour la plus intelligente disponible, mais elle offre une protection de base contre l'écrasement des données récentes.

Déménager

Il existe d'autres façons de déplacer des données que le simple mv commande, mais comme programme par défaut pour le travail, mv est une bonne option universelle. Maintenant que vous connaissez les options dont vous disposez, vous pouvez utiliser mv plus intelligent que jamais.


Linux
  1. Comment trouver un fichier sous Linux

  2. Comment créer un swap sous Linux

  3. Comment créer un fichier d'échange sous Linux

  4. Comment vider un fichier journal sous Linux

  5. Comment monter un fichier iso sous Linux

Comment renommer un ou plusieurs fichiers sous Linux

Comment créer un lien symbolique vers un fichier sous Linux

Comment chiffrer un fichier sous Linux

Comment désactiver Swap sous Linux

Comment utiliser gzip sous Linux ?

Comment compresser un fichier sous Linux