GNU/Linux >> Tutoriels Linux >  >> Linux

Dois-je mettre une barre oblique après la source et la destination lors de la copie des dossiers

J'essaie de mettre un / à la fin sur la cible.

Si je fais une erreur et que la source et la cible sont toutes deux des fichiers plutôt que des répertoires, ajouter le / signifie que j'obtiendrai une erreur ; sans le / il encombrera le fichier cible.

(La complétion par tabulation ajoutera généralement le / final de toute façon, il est donc généralement plus facile de l'ajouter que de ne pas le faire.)

Voir la réponse de Volker Siegel pour plus de détails.


Pas de barre oblique à la fin du répertoire source

Vous ne devriez pas placez une barre oblique finale sur le répertoire source :

Le point est pertinent pour cp - mais aussi à mv , où il est beaucoup plus important .

Je citerai l'avertissement du manuel - notez qu'il ne se trouve pas dans la page de manuel, mais dans la page d'informations info coreutils 'mv invocation' :

Avertissement :évitez de spécifier un nom de source avec une barre oblique à la fin, lorsqu'il peut s'agir d'un lien symbolique vers un répertoire. Sinon, 'mv' peut faire quelque chose de très surprenant, puisque son comportement dépend de l'appel système rename sous-jacent. Sur un système avec un noyau Linux moderne, cela échoue avec 'errno=ENOTDIR'. Cependant, sur d'autres systèmes (au moins FreeBSD 6.1 et Solaris 10), il renomme silencieusement non pas le lien symbolique mais plutôt le répertoire référencé par le lien symbolique.

Utilisez des barres obliques finales dans le répertoire de destination

Si vous souhaitez déplacer des fichiers et des répertoires dans un répertoire, vous devez ajouter une barre oblique finale au répertoire de destination.
Cela ne change rien tant que tout se passe bien.
Mais cela peut vous éviter une erreur courante qui entraîne la perte ou la modification de données :

Si vous déplacez un fichier dans un répertoire, deux problèmes peuvent survenir :
Vous avez peut-être mal orthographié le dernier composant du nom du répertoire de destination, comme un mauvais caractère. Deux des choses qui peuvent arriver sont ces deux cas :

  • Si le nom mal orthographié n'est pas existe :

    • le fichier sera renommé avec le nom mal orthographié

    • il est déplacé dans le répertoire parent de la destination prévue

    • Donc, il finit par ne pas l'être, pas là où vous vous attendez à ce qu'il aille.

  • Si le nom mal orthographié fait existe, et est un fichier :

    • le fichier écrasera le fichier avec le nom mal orthographié, dans le répertoire parent de la destination.

    • Encore une fois, vous ne le trouverez pas là où il était, ou où il devrait être :il a simplement disparu.

Si vous utilisez une barre oblique finale sur le répertoire de destination, les deux cas sont évités :

Ça fait mv ne l'utilisez pas comme nom de fichier alors qu'il le ferait normalement. Au lieu de cela, mv donne juste une erreur :

mv: failed to access ‘foo/’: Not a directory

Supprimer automatiquement les barres obliques

Il existe une option spéciale pour cp et mv pour atténuer le risque en supprimant toujours la barre oblique des répertoires src :

Some GNU programs (at least `cp' and `mv') allow you to remove any
trailing slashes from each SOURCE argument before operating on it.  The
`--strip-trailing-slashes' option enables this behavior.

   This is useful when a SOURCE argument may have a trailing slash and
specify a symbolic link to a directory.  This scenario is in fact rather
common because some shells can automatically append a trailing slash
when performing file name completion on such symbolic links.  Without
this option, `mv', for example, (via the system's rename function) must
interpret a trailing slash as a request to dereference the symbolic link
and so must rename the indirectly referenced _directory_ and not the
symbolic link.  Although it may seem surprising that such behavior be
the default, it is required by POSIX and is consistent with other parts
of that standard.

Linux
  1. Lorsque vous tapez "ls -a", quelle est la signification de "." Et ".."?

  2. Comment comparer deux dossiers et copier la différence dans un troisième dossier ?

  3. Fusionner des dossiers avec Mv ?

  4. Quand doit-on compiler et installer à partir de la source ?

  5. Pouvez-vous mettre plusieurs scripts exécutables dans un seul répertoire et, en vous procurant ce répertoire, rendre toutes ces commandes disponibles ?

Comment copier des fichiers et des répertoires sous Linux

Comment rechercher et copier certains types de fichiers d'un répertoire à un autre sous Linux

Comment copier un répertoire sous Linux

Quand dois-je utiliser TCP_NODELAY et quand TCP_CORK ?

Impossible d'accéder aux dossiers montés par sshfs après la veille (ou lorsque la connexion est perdue)

différence copier le dossier de contenu entre /. et /* sous linux