3 votos

cp- copiar un archivo en muchas carpetas, pero sólo si ya existe allí

En otro foro he visto 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 subcarpetas reemplazar el info.txt existente archivos, pero no hacer nada cuando la subcarpeta no contiene info.txt .

Así que necesito lo contrario de -n.

¿Cómo puedo conseguirlo?

0 votos

Tenía el mando de: macuser.de/threads/

2voto

user3439894 Puntos 5883

Yo no analizaría la salida de ls Utiliza el find comando en su lugar:

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

Tenga en cuenta que el <code>-v</code> opción con <code>cp</code> no es necesario, sólo me gusta ver qué se está copiando dónde.

Para responder a un comentario, el find comando que se muestra arriba busca en todo el PWD . Si quiere limitar la búsqueda a los subdirectorios de primer nivel del PWD luego agrega -maxdepth 2 a la find comando 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 ./a/info.txt y ./b/info.txt son reemplazados, ./a/1/info.txt no lo es.

0 votos

Probablemente, deberá limitar la profundidad de la búsqueda, ya que, de lo contrario, la copia fallará en los subdirectorios

0 votos

@patrix, ¿¡Qué!? Si he entendido el OP esto hace exactamente lo que se pidió como es, no hay necesidad de limitar la profundidad de encontrar, ya que se supone que debe encontrar todos los archivos info.txt en los subdirectorios de la PWD.

0 votos

Sí, lo que sea. Si el PO está contento, bien :-)

1voto

Suponiendo que los nombres de los directorios sean algo sensatos (sin nuevas líneas, etc.)

ls | while read dir; do
    [[ -e "$dir"/info.txt ]] && cp ../y/info.txt "$dir"/
done

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X