Estoy intentando hacer algo bastante simple. Tengo 40 archivos de texto en los que necesito eliminar todo y reemplazarlo con el contenido de un archivo de texto de plantilla.
¿Cuál es la forma más fácil/rápida?
NB: No quiero buscar y reemplazar, sino eliminar todo y luego copiarlo dentro. Eso sería como abrir el archivo, ctrl + A >> del >> ctrl + v para cada archivo
Respuesta1
tipo Unix
En una línea de comandos similar a Unix (en Linux, OSX, etc.), puede utilizarla cat
para imprimir el contenido de un archivo en STDOUT y >
redirigir STDOUT a un archivo, sobrescribiendo su contenido.
cat template.txt > file.txt
La forma más sencilla es colocarlo template.txt
en un directorio separado, luego puede usar un bucle for para afectar cada *.txt en el directorio de trabajo:
for f in ./*.txt; do cat /path/to/template.txt > "$f"; done
En sistemas con bash 4+ (es probable que cualquier *nix moderno tenga esto; verifique con bash --version
), puede usar globbing extendido, para que pueda tener template.txt
en el mismo directorio que los archivos que desea sobrescribir:
shopt -s extglob
for f in ./!(*template).txt; do cat template.txt > "$f"; done
Si tiene archivos de texto en muchos subdirectorios (ADVERTENCIA: ESTO SOBREESCRIBIRÁTODO *.txt
ARCHIVOS EN EL DIRECTORIO DE TRABAJO Y TODOS SUS SUBDIRECTORIOS, Y TODOS SUS SUBDIRECTORIOS...), puedes usar globstar:
shopt -s globstar
for f in ./**/*.txt; do cat /path/to/template.txt > "$f"; done
## OR:
shopt -s globstar extglob
for f in ./**/!(*template).txt; do cat template.txt > "$f"; done
ventanas
Esto funciona de manera similar, aunque la sintaxis es diferente. En lugar de cat
, utilice type
:
type template.txt > file.txt
Para trabajar en cada uno .txt
de un directorio:
FOR %F IN (*.txt) DO type C:\path\to\template.txt > %F
Para recursividad, utilice /R
:
FOR /R %F IN (*.txt) DO type C:\path\to\template.txt > %F
Respuesta2
Bueno, lo que desea se puede hacer mediante una búsqueda y reemplazo automatizados (como lo que hace powergrep pero gratis), pero es más fácil simplemente tomar la plantilla y copiarla como cada archivo nuevo. Esto se puede hacer desde la línea de comando.
Cree un archivo con una lista de todos los nombres de archivo en los que desea colocar esa plantilla.
Entonces listoffiles.txt tiene contenido:
archivo1.txt
archivo2.txt
archivo3.txt
Luego abra un mensaje cmd y haga:
C:\fdf>para /f %f en (listoffiles.txt) hacer @echo copiar template.txt %f
copiar plantilla.txt archivo1.txt
copiar plantilla.txt archivo2.txt
copiar plantilla.txt archivo3.txtC:\fdf>
Simplemente cambie la línea @echo copy template.txt para leer copy template.txt. es decir, elimine el @echo o solo el eco.
Necesita listoffiles.txt en c:\fdf y template.txt allí también. Y creará file1.txt file2.txt, etc.