cp- copia un archivo en muchas carpetas, pero solo si ya existe allí

3

En otro foro vi este comando:

  

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

Copia info.txt en subcarpetas (por ejemplo, carpeta a, carpeta b, carpeta c) en el directorio de trabajo actual.

Ahora quiero copiar el archivo info.txt en las subcarpetas reemplazando los archivos existentes de info.txt , pero no hace nada cuando la subcarpeta no contiene info.txt .

Necesito lo contrario de -n.

¿Cómo puedo lograr esto?

    
pregunta Kirlia 10.10.2017 - 09:53

2 respuestas

2

No analizaría la salida de ls ; en su lugar, utilice el comando find :

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

Tenga en cuenta que la opción -v con cp no es necesaria, solo me gustaría ver qué se está copiando dónde.

Para abordar un comentario, el comando find que se muestra arriba busca el PWD completo. Si desea limitar la búsqueda a solo los subdirectorios de primer nivel de PWD , agregue -maxdepth 2 al comando find , por ejemplo:

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

En este escenario:

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

Sólo se reemplazan ./a/info.txt y ./b/info.txt , ./a/1/info.txt no.

    
respondido por el user3439894 10.10.2017 - 13:54
1

Suponiendo nombres de directorio un tanto sanos (sin nuevas líneas, etc.)

ls | while read dir; do
    [[ -e "$dir"/info.txt ]] && cp ../y/info.txt "$dir"/
done
    
respondido por el nohillside 10.10.2017 - 13:17

Lea otras preguntas en las etiquetas