web-dev-qa-db-fra.com

Comment éviter le message d'avertissement «sont le même fichier» lors de l'utilisation de cp sous Linux?

J'essaie de copier certains fichiers d'un répertoire à un autre. Utilisation de cette commande

find "$HOME" -name '*.txt' -type f -print0 | xargs -0 cp -t $HOME/newdir

Je reçois un message d'avertissement disant

cp: '/home/me/newdir/logfile.txt' et '/home/me/newdir/logfile.txt' sont le même fichier

Comment éviter ce message d'avertissement?

23
Matkrupp

Le problème est que vous essayez de copier un fichier sur lui-même. Vous pouvez l'éviter en excluant le répertoire de destination des résultats de la commande find comme ceci:

find "$HOME" -name '*.txt' -type f -not -path "$HOME/newdir/*" -print0 | xargs -0 cp -t "$HOME/newdir" 
18
user000001

Rendez-le unique dans le processus. Mais cela nécessite un tri

find "$HOME" -name '*.txt' -type f -print0 | sort -zu | xargs -0 cp -t "$HOME/newdir"

Ou s'il ne s'agit pas des fichiers générés, essayez d'utiliser le -u option de cp.

find "$HOME" -name '*.txt' -type f -print0 | xargs -0 cp -ut "$HOME/newdir"
 - u copier uniquement lorsque le fichier SOURCE est plus récent que le fichier de destination ou lorsque 
 le fichier de destination est manquant 
1
konsolebox

essayez d'utiliser install à la place, cela remplace en supprimant d'abord le fichier.

install -v target/release/dynnsd-client target/
removed 'target/dynnsd-client'
'target/release/dynnsd-client' -> 'target/dynnsd-client'

puis supprimez les fichiers source

0
teknopaul