déplacer des fichiers sous Linux peut sembler relativement simple, mais il y a plus d’options disponibles que la plupart ne le réalisent. 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 de l’expérience ont rarement explorées.
déplacer quoi?
avant de vous plonger dans le déplacement de fichiers, il vaut la peine de regarder de plus près ce qui se passe réellement lors du déplacement d’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 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 uniquement à 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 pas ou ne le crée pas.
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
Lorsque vous déplacez un fichier d’un disque dur vers un autre, cependant, 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, déplacer et renommer des fichiers est littéralement la même action., Que vous déplacez 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 sur Linux. Si vous êtes habitué à l’expérience de bureau, dans un sens générique, alors 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:
le Gestionnaire de fichiers Dolphin dans le bureau Plasma KDE invite par défaut l’utilisateur Maintenir la touche Maj enfoncée tout en faisant glisser un fichier force une action de déplacement:
déplacement sur la ligne de commande
la commande shell destinée au déplacement de fichiers sous Linux, BSD, Illumos, Solaris et MacOS est mv., Une commande simple avec un prévisible de la syntaxe, mv <source> <destination> déplace un fichier source vers la destination spécifiée, chacun défini par un absolu ou relatif du fichier chemin d’accès. Comme mentionné précédemment, mv est une commande si courante pour les utilisateurs POSIX que beaucoup de ses modificateurs supplémentaires sont généralement inconnus, donc cet article apporte quelques modificateurs utiles à votre attention si vous êtes nouveau ou expérimenté.,
cependant, toutes les commandes mv n’ont pas été écrites par les mêmes personnes, vous pouvez donc avoir GNU MV, BSD mV ou Sun MV, selon votre système d’exploitation. Les options de commande diffèrent d’une implémentation à l’autre (BSD mv n’a pas d’options longues du tout), alors reportez-vous à votre page de manuel mv 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).,
le Déplacement d’un fichier
Pour déplacer un fichier d’un dossier à un autre avec le mv, n’oubliez pas la syntaxe mv <source> <destination>. Par exemple, pour déplacer l’exemple de fichier.txt dans votre répertoire Documents:
$ touch example.txt
$ mv example.txt ~/Documents
$ ls ~/Documents
example.txt
tout comme lorsque vous déplacez un fichier en le faisant glisser-déposer sur une icône de dossier, Cette commande ne remplace pas les Documents par un exemple.txt. Au lieu de cela, mv détecte que Documents est un dossier et place l’exemple.fichier txt en elle.,
Vous pouvez également renommer le fichier lorsque 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$ lsfoo2.txt
déplacer un répertoire
la commande différencier un fichier d’un répertoire comme CP le fait., 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à, la commande mv remplace le fichier de destination par celui que vous déplacez, par défaut. Ce comportement s’appelle clobbering, et parfois c’est exactement ce que vous avez l’intention. D’autres fois, il ne l’est pas.
certaines distributions alias (ou vous pouvez écrire votre propre) mv à mv interactive interactive, qui vous invite à confirmer. Certains ne le font pas., Quoi qu’il en soit, vous pouvez utiliser l’option interactive interactive or-i pour vous assurer que mv demande une confirmation dans le cas où deux fichiers du même nom sont en conflit:
$ mv --interactive example.txt ~/Documents
mv: overwrite '~/Documents/example.txt'?
Si vous ne souhaitez pas intervenir manuellement, utilisez plutôt –no-clobber ou-N. Ce drapeau silencieusement rejette l’action de déplacement en cas de conflit. Dans cet exemple, un fichier nommé exemple.,txt existe déjà dans ~ / Documents, il n’est donc pas déplacé du répertoire courant comme indiqué:
$ mv --no-clobber example.txt ~/Documents
$ ls
example.txt
déplacement avec des sauvegardes
Si vous utilisez GNU mv, il existe des options de sauvegarde offrant un autre moyen de déplacement sûr. Pour créer une sauvegarde de tout fichier de destination en conflit, utilisez l’option-b:
$ 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 dans l’emplacement de destination.,
Une autre option de sauvegarde GNU est backup 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 schéma simple est utilisé.
- none: ne crée pas de sauvegarde même si –backup est défini. Cette option est utile pour remplacer un alias mv 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 caché de votre vue quotidienne avec l’option ignore ignore-backups pour ls.
Par exemple:
un schéma 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 ~/.fichier bashrc ou dynamiquement avant votre commande:
l’option backup backup respecte toujours l’option interactive interactive or-i, elle vous invite donc toujours à écraser le fichier de destination, même si elle crée une sauvegarde avant de le faire:
Vous pouvez remplacer-i avec l’option force force ou-F.,
l’option backup backup n’est pas disponible dans BSD mv.
déplacement de 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: target 'baz' is not a directory
la syntaxe de GNU MV est assez flexible., Si vous ne parvenez pas à fournir la commande mv avec la destination comme argument final, utilisez l’option target target-directory ou-t:
$ mv --target-directory=~/Documents foo bar baz
$ ls ~/Documents
foo bar baz
ceci est particulièrement utile lors de la construction de commandes mv à partir de la sortie d’une autre commande, telle que la commande find, xargs ou GNU Parallel.
Mobile basé sur mtime
Avec GNU mv, vous pouvez définir une action de déplacement basé sur si le fichier déplacé est plus récent que le fichier de destination remplacerait., Cette option est possible avec l’option update update ou-u, et n’est pas disponible dans BSD mv:
ce résultat est exclusivement basé sur le temps de modification des fichiers, pas sur un diff des deux fichiers, donc utilisez-le avec précaution. Il est facile de tromper mv avec une simple commande tactile:
é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éplacement
Il y a plus de façons de déplacer des données que la commande mv, mais en tant que programme par défaut pour le travail, mv est une bonne option universelle., Maintenant que vous savez quelles options vous avez disponibles, vous pouvez utiliser mv plus intelligent que jamais.