cp- copia un file in molte cartelle, ma solo se esiste già lì

3

In un altro forum ho visto questo comando:

ls -1 | xargs -n 1 cp ../y/info.txt

Copia info.txt in sottocartelle (ad esempio cartella a, cartella b, cartella c) nella directory di lavoro corrente.

Ora voglio copiare il file info.txt nelle sottocartelle sostituendo i file info.txt esistenti, ma non fare nulla quando la sottocartella non contiene info.txt .

Quindi ho bisogno del contrario di -n.

Come posso realizzare questo?

    
posta Kirlia 10.10.2017 - 09:53
fonte

2 risposte

2

Non vorrei analizzare l'output di ls , usa invece il find comando :

find . -type f -name "info.txt" -exec cp -v ../y/info.txt {} \;

Si noti che l'opzione -v con cp non è necessaria, mi piace solo vedere cosa viene copiato dove.

Per indirizzare un commento, il find comando mostrato sopra cerca l'intero PWD . Se vuoi limitare la ricerca solo alle sottodirectory di primo livello di PWD , aggiungi -maxdepth 2 al find comando , ad esempio:

find . -maxdepth 2 -type f -name "info.txt" -exec cp -v ../y/info.txt {} \;

In questo scenario:

.
├── a
│   ├── 1
│   │   └── info.txt
│   └── info.txt
├── b
│   └── info.txt
└── c

Solo ./a/info.txt e ./b/info.txt sono sostituiti, ./a/1/info.txt no.

    
risposta data 10.10.2017 - 13:54
fonte
1

Supponendo nomi di directory un po 'saggi (nessuna nuova riga, ecc.)

ls | while read dir; do
    [[ -e "$dir"/info.txt ]] && cp ../y/info.txt "$dir"/
done
    
risposta data 10.10.2017 - 13:17
fonte

Leggi altre domande sui tag