comment arrêter cp: écraser './xxx'? rapide

19

Comment puis-je empêcher la commande cp d'inviter à remplacer. Je veux écraser tous les fichiers sans avoir à revenir sur le terminal. Comme ce sont des fichiers volumineux et prennent du temps à terminer.

J'ai essayé d'utiliser l'option -f. Il me demande toujours si je veux écraser.

   -f, --force
          if an existing destination file cannot be opened, remove it and
          try again (redundant if the -n option is used)

cp -f /media/somedir/somefiles* .  
cp: overwrite `./somefilesxxx'? y
nelaaro
la source

Réponses:

17

En plus d'appeler /bin/cp, vous pouvez effectuer l'une des actions suivantes:

\cp -f ...
command cp -f ...

Cependant, je conviens que vous ne devriez pas vous habituer à utiliser un alias comme cp -iou rm -i- si vous vous asseyez sur une coque différente, vous n'aurez pas le filet de sécurité dont vous êtes devenu dépendant.

glenn jackman
la source
1
Un whereis cpaffichera où est la commande. Vous pourrez donc appeler la vraie commande au lieu de l'alias.
AnthonyB
12

Après avoir vu cette solution. J'ai pu voir que la fonction d'alias bashes était à l'origine des problèmes. http://systembash.com/content/prompt-to-confirm-copy-even-with-cp-f/

which cp  
alias cp='cp -i'
/bin/cp
which cp | grep cp
alias cp='cp -i'
/bin/cp

Il recommande

unalias cp

Je veux toujours conserver l'alias, je ne veux tout simplement pas qu'il s'applique à cette instance. Ma solution est d'utiliser le binaire avec un chemin complet, afin que la fonction d'alias bashes ne prenne pas le relais. Cela fonctionne assez bien.

/bin/cp -f /media/somedir/somefiles* .  
nelaaro
la source
4

Malheureusement sous Linux, la commande copy "cp" n'a pas d'option pour répondre automatiquement à cette question avec une réponse "y" ou "n". Il existe plusieurs solutions à ce problème en fonction de ce que vous souhaitez faire. Une solution consiste à utiliser la commande Unix "oui". Cette commande affichera une chaîne à plusieurs reprises jusqu'à ce qu'elle soit supprimée.

Si nous voulons écraser tous les fichiers du répertoire de destination, vous pouvez utiliser la commande "oui" pour répondre à toutes les questions par un "y". "y" est une valeur par défaut, il n'est donc pas nécessaire de la spécifier.

yes | cp source/*.txt destination/.

Si nous voulons éviter d'écraser l'un des fichiers dans le répertoire de destination, vous pouvez utiliser la commande "oui" pour répondre à toutes les questions par un non "n".

yes n | cp source/*.txt destination/.

Utilisez "man yes" pour plus d'informations sur la commande "yes".

Michael Sundell
la source