2013-08-09 13 views
17

Sto provando a copiare determinati file da una directory a un'altra. Utilizzando questo comandoCome evitare il messaggio di avviso "sono lo stesso file" quando si usa cp in Linux?

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

ricevo un messaggio di avviso dicendo

cp: '/home/me/newdir/logfile.txt' e '/home/me/newdir/logfile.txt' sono lo stesso file

Come evitare questo messaggio di avviso?

+1

'your_command 2>/dev/null' =) –

+0

Sì, questo funziona ma non del tutto la soluzione che cercavo :-) Con questo mi sbarazzerò di questo avviso ma non posso evitarlo ancora – Matkrupp

risposta

11

Il problema è che si tenta di copiare un file su se stesso. È possibile evitare che escludendo la directory di destinazione dai risultati del comando find come questo:

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

Grazie, ma questo genera lo stesso avviso in Ubuntu. – Matkrupp

+0

@Matkrupp Sì, ho avuto un errore di battitura. Prova con la versione aggiornata. – user000001

1

Renderlo unico nel processo. Ma questo richiede l'ordinamento

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

O se non si tratta dei file generati, tenta di utilizzare l'opzione -u di cp.

find "$HOME" -name '*.txt' -type f -print0 | xargs -0 cp -ut "$HOME/newdir" 
 
-u copy only when the SOURCE file is newer than the destination file or when 
    the destination file is missing 
+0

Grazie, ma entrambe queste soluzioni generano lo stesso messaggio di avviso in Ubuntu bash. – Matkrupp

Problemi correlati