Estou tentando fazer uma coisa bem simples. Tenho 40 arquivos de texto nos quais preciso deletar tudo e substituir pelo conteúdo de um arquivo de texto modelo.
Qual é a maneira mais fácil/rápida?
NB: Não quero pesquisar e substituir, mas sim apagar tudo e depois copiar dentro. Seria como abrir o arquivo, ctrl + A >> del >> ctrl + v para cada arquivo
Responder1
Tipo Unix
Em uma linha de comando do tipo Unix (no Linux, OSX, etc.), você pode usar cat
para imprimir o conteúdo de um arquivo em STDOUT e >
redirecionar STDOUT para um arquivo, sobrescrevendo seu conteúdo.
cat template.txt > file.txt
A maneira mais fácil é colocar template.txt
em um diretório separado, então você pode usar um loop for para afetar cada *.txt no diretório de trabalho:
for f in ./*.txt; do cat /path/to/template.txt > "$f"; done
Em sistemas com bash 4+ (qualquer *nix moderno provavelmente terá isso; verifique com bash --version
), você pode usar globbing estendido, para que possa ter template.txt
no mesmo diretório dos arquivos que deseja sobrescrever:
shopt -s extglob
for f in ./!(*template).txt; do cat template.txt > "$f"; done
Se você tiver arquivos de texto em muitos subdiretórios (AVISO: ISTO SERÁ SOBRESCRITOTODOS *.txt
ARQUIVOS NO DIRETÓRIO DE TRABALHO E TODOS OS SEUS SUB-DIRETÓRIOS, E TODOS OS SEUS SUB-DIRETÓRIOS...), você pode 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
janelas
Isso funciona de forma semelhante, embora a sintaxe seja diferente. Em vez de cat
, use type
:
type template.txt > file.txt
Para trabalhar em todos .txt
em um diretório:
FOR %F IN (*.txt) DO type C:\path\to\template.txt > %F
Para recursividade, use /R
:
FOR /R %F IN (*.txt) DO type C:\path\to\template.txt > %F
Responder2
Bem, o que você deseja pode ser feito por uma pesquisa e substituição automatizada (como o que o powergrep faz, mas de graça), mas é mais fácil simplesmente pegar o modelo e copiá-lo a cada novo arquivo. Isso pode ser feito na linha de comando.
Crie um arquivo com uma lista de todos os nomes de arquivos nos quais você deseja colocar esse modelo.
Então listoffiles.txt tem conteúdo:
arquivo1.txt
arquivo2.txt
arquivo3.txt
Em seguida, abra um prompt cmd e faça:
C:\fdf>for /f %f in (listoffiles.txt) faça @echo copy template.txt %f
copiar template.txt arquivo1.txt
copiar template.txt arquivo2.txt
copiar template.txt arquivo3.txtC:\fdf>
Basta alterar a linha @echo copy template.txt para ler copy template.txt. ou seja, remova o @echo ou apenas o echo.
Você precisa de listoffiles.txt em c:\fdf e template.txt lá também. E criará arquivo1.txt arquivo2.txt etc.