cp -f ne peut pas remplacer l'alias cp -i

8

Dans mon fichier /home/user/.bashrc, j'ai ces alias pour éviter les erreurs:

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

Si je suis vraiment sûr de ce que je fais, je peux écraser rmet mvalias en utilisant rm -fou mv -f, il ne me demandera pas si je veux vraiment écraser les fichiers.

Le problème, c'est que cela ne fonctionne pas pour la cpcommande, en utilisant cp -fme posera toujours une question.

Est-ce normal? Que dois-je faire pour avoir un cp -ialias par défaut et pouvoir utiliser la cp -fcommande aussi?

J'utilise Debian Wheezy 64bit.

baptx
la source

Réponses:

9

Alors que -fsignifie forcer sur chacun d'eux, pour cp, cela signifie forcer en essayant de supprimer la destination en premier si la destination ne peut pas être mise à jour .

Pour mvet rm, -fremplace simplement -i. Mais pour cp, cela change le comportement de l'utilitaire, -fn'est pas l'opposé de -idans ce cas, a du cp -i -fsens et signifie, si la cible existe, demandez à l'utilisateur et si elle ne peut pas être remplacée, supprimez-la d'abord .

Même pour mvet rm, l'ajout -fn'est pas la même chose que la suppression -ilorsqu'il s'agit de messages d'avertissement et d'erreur envoyés à l'utilisateur. Par exemple rm non-existent-file, signalerait une erreur alors rm -i -f non-existent-fileque non.

Comme déjà mentionné, pour supprimer l'effet de -i, au lieu d'ajouter -f, vous devez désactiver l'alias en utilisant l'une des solutions fournies.

Stéphane Chazelas
la source
"Pour mv et cp, -f remplace simplement -i." Vous voulez dire mv et rm je pense. Merci d'avoir expliqué, c'est très clair pour moi maintenant!
baptx
11

En donnant cp -f, l'option s'ajoute simplement à l'option existante.

Autrement dit, si vous en avez un alias cp='cp -i', le mot cp est remplacé dans la commande cp -f, donc vous obtenez cp -i -f file1 file2.

Pour remplacer l'alias:

\cp -f file1 file2

La barre oblique inverse avant la commande désactivera l'alias. Vous pouvez utiliser command cpau lieu de \cppour plus de lisibilité.

Gourou
la source
J'ai fait une erreur dans mon post, quand j'ai parlé de cp -r, je voulais dire cp -f, c'est corrigé. Votre solution avec une barre oblique inverse fonctionne, merci! Mais je ne comprends toujours pas pourquoi la barre oblique inverse n'est pas nécessaire pour la commande mv ou rm, l'alias est directement désactivé avec mv -f et rm -f!
baptx