GNU/Linux >> Tutoriels Linux >  >> Linux

Déplacer des fichiers sur Linux sans mv

L'humble mv La commande est l'un de ces outils utiles que vous trouvez sur chaque boîte POSIX que vous rencontrez. Son travail est clairement défini, et il le fait bien :déplacer un fichier d'un endroit à un autre dans un système de fichiers. Mais Linux n'est rien sinon flexible, et il existe d'autres options pour déplacer des fichiers. L'utilisation de différents outils peut offrir de petits avantages qui correspondent parfaitement à un cas d'utilisation spécifique.

Avant de trop s'éloigner de mv , examinez les résultats par défaut de cette commande. Tout d'abord, créez un répertoire et générez des fichiers avec des autorisations définies sur 777 :

$ mkdir example
$ touch example/{foo,bar,baz}
$ for i in example/*; do ls /bin > "${i}"; done
$ chmod 777 example/*

Vous n'y pensez probablement pas de cette façon, mais les fichiers existent sous forme d'entrées, appelées nœuds d'index (communément appelés inodes ), dans un système de fichiers. Vous pouvez voir quel inode un fichier occupe avec la commande ls et son --inode choix :

$ ls --inode example/foo
7476868 example/foo

À titre de test, déplacez ce fichier du répertoire d'exemple vers votre répertoire actuel, puis affichez les attributs du fichier :

$ mv example/foo .
$ ls -l -G -g --inode
7476868 -rwxrwxrwx. 1 29545 Aug  2 07:28 foo

Comme vous pouvez le constater, le fichier d'origine, ainsi que ses autorisations existantes, a été "déplacé", mais son inode n'a pas changé.

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

C'est ainsi que le mv est programmé pour déplacer un fichier :laissez l'inode inchangé (sauf si le fichier est déplacé vers un système de fichiers différent) et conservez sa propriété et ses autorisations.

D'autres outils offrent différentes options.

Copier et supprimer

Sur certains systèmes, l'action de déplacement est une véritable action de déplacement :les bits sont supprimés d'un point du système de fichiers et réaffectés à un autre. Ce comportement est largement tombé en disgrâce. Les actions de déplacement sont désormais soit des réaffectations d'attributs (un inode pointe désormais vers un emplacement différent dans votre organisation de fichiers), soit des fusions d'une action de copie suivie d'une action de suppression.

L'intention philosophique de cette conception est d'assurer qu'en cas d'échec d'un déménagement, un fichier ne reste pas en morceaux.

Le cp commande, contrairement à mv , crée un tout nouvel objet de données dans votre système de fichiers. Il a un nouvel emplacement d'inode et il est soumis à votre umask actif. Vous pouvez imiter un mouvement en utilisant le cp et rm (ou corbeille si vous l'avez) commandes :

$ cp example/foo .
$ ls -l -G -g --inode
7476869 -rwxrwxr-x. 29545 Aug  2 11:58 foo
$ trash example/foo

Le nouveau foo Le fichier dans cet exemple a obtenu 775 autorisations car le umask de l'emplacement exclut spécifiquement les autorisations d'écriture :

$ umask
0002

Pour plus d'informations sur umask, lisez l'article d'Alex Juarez sur les autorisations de fichiers.

Cat et supprimer

Semblable à copier et supprimer, en utilisant le chat (ou tac , d'ailleurs) la commande attribue différentes autorisations lors de la création de votre fichier "déplacé". En supposant un nouvel environnement de test sans foo dans le répertoire courant :

$ cat example/foo > foo
$ ls -l -G -g --inode
7476869 -rw-rw-r--. 29545 Aug 8 12:21 foo
$ trash example/foo

Cette fois, un nouveau fichier a été créé sans qu'aucune autorisation préalable ne soit définie. Le résultat est entièrement soumis au paramètre umask, qui ne bloque aucun bit d'autorisation pour l'utilisateur et le groupe (le bit exécutable n'est pas accordé pour les nouveaux fichiers, quel que soit umask), mais il bloque le bit d'écriture (valeur deux) des autres. Le résultat est un fichier avec la permission 664.

Rsync

Le rsync La commande est un outil polyvalent robuste pour envoyer des fichiers entre les hôtes et les emplacements du système de fichiers. Cette commande dispose de nombreuses options, y compris la possibilité de faire en sorte que sa destination reflète sa source.

Vous pouvez copier puis supprimer un fichier avec rsync en utilisant --remove-source-files option, ainsi que toute autre option que vous choisissez pour effectuer la synchronisation (une option courante et à usage général est --archive ):

$ rsync --archive --remove-source-files example/foo .
$ ls example
bar  baz
$ ls -lGgi
7476870 -rwxrwxrwx. 1 seth users 29545 Aug 8 12:23 foo

Ici, vous pouvez voir que l'autorisation et la propriété du fichier ont été conservées, que l'horodatage a été mis à jour et que le fichier source a été supprimé.

Un mot d'avertissement : Ne confondez pas cette option avec --delete , qui supprime les fichiers de votre destination annuaire. Utilisation abusive de --supprimer peut effacer la plupart de vos données, et il est recommandé d'éviter cette option, sauf dans un environnement de test.

Vous pouvez remplacer certaines de ces valeurs par défaut, en modifiant les paramètres d'autorisation et de modification :

$ rsync --chmod=666 --times \
--remove-source-files example/foo .
$ ls example
bar  baz
$ ls -lGgi
7476871 -rw-rw-r--. 1 seth users 29545 Aug 8 12:55 foo

Ici, le umask de la destination est respecté, donc le --chmod=666 l'option donne un fichier avec 664 autorisations.

Cependant, les avantages vont au-delà des autorisations. Le rsync a de nombreuses options utiles (dont la moindre n'est pas --exclude flag afin que vous puissiez exempter des éléments d'une grande opération de déplacement) qui en font un outil plus robuste que le simple mv commande. Par exemple, pour exclure tous les fichiers de sauvegarde lors du déplacement d'un ensemble de fichiers :

$ rsync --chmod=666 --times \
--exclude '*~' \
--remove-source-files example/foo .

Définir les autorisations avec l'installation

L'installation La commande est une commande de copie spécifiquement destinée aux développeurs et est principalement invoquée dans le cadre de la routine d'installation de la compilation de logiciels. Il n'est pas bien connu des utilisateurs (et je me demande souvent pourquoi il a un nom aussi intuitif, ne laissant que des acronymes et des noms d'animaux pour les gestionnaires de paquets), mais install est en fait un moyen utile de placer les fichiers là où vous le souhaitez.

Il existe de nombreuses options pour l'installation commande, y compris --backup et --comparer commande (pour éviter de "mettre à jour" une copie plus récente d'un fichier).

Contrairement à cp et chat , mais exactement comme mv , l'installation La commande peut copier un fichier en préservant son horodatage :

$ install --preserve-timestamp example/foo .
$ ls -l -G -g --inode
7476869 -rwxr-xr-x. 1 29545 Aug  2 07:28 foo
$ trash example/foo

Ici, le fichier a été copié dans un nouvel inode, mais son mtime n'a pas changé. Les autorisations, cependant, ont été définies sur installer par défaut de 755 .

Vous pouvez utiliser installer pour définir les autorisations, le propriétaire et le groupe du fichier :

$ install --preserve-timestamp \
--owner=skenlon \
--group=dialout \
--mode=666 example/foo .
$ ls -li
7476869 -rw-rw-rw-. 1 skenlon dialout 29545 Aug  2 07:28 foo
$ trash example/foo

Déplacer, copier et supprimer

Les fichiers contiennent des données, et les fichiers vraiment importants contiennent votre Les données. Apprendre à les gérer judicieusement est important, et vous disposez désormais de la boîte à outils pour vous assurer que vos données sont traitées exactement comme vous le souhaitez.

Avez-vous une manière différente de gérer vos données ? Faites-nous part de vos idées dans les commentaires.


Linux
  1. Comment convertir des fichiers en codage UTF-8 sous Linux

  2. Comment afficher ou modifier l'ACL dans les fichiers Linux

  3. Comment extraire les fichiers .gz et .tar.gz sous Linux

  4. Transfert de fichiers Android pour Linux - Envoyer des fichiers vers Linux sans limite de taille

  5. Déplacer un fichier sous Linux en C

Commande ls sous Linux pour lister les fichiers

Comment renommer un ou plusieurs fichiers sous Linux

[Bash Tips] Renommer les fichiers sans taper deux fois le nom complet sous Linux

Comment trouver des fichiers basés sur l'horodatage sous Linux

Comment supprimer des fichiers répertoriés dans un autre fichier sous Linux

Comment compresser un fichier sous Linux