Como é que adiciono a saída de um comando ao fim de um ficheiro de texto?
Utilize >>
em vez de >
quando dirigir a saída para um ficheiro:
your_command >> file_to_append_to
Se file_to_append_to
não existir, será criado.
Exemplo:
$ echo "hello" > file
$ echo "world" >> file
$ cat file
hello
world
Para apender
um arquivo utilize >>
echo "olá mundo"
read.txt
cat read.txt
echo " olá, siva"
read.txt
cat read.txt
então a saída deve ser
olá mundo # do 1º comando echo
olá mundo # do 2º comando echo olá siva
Para "sobreescrever" um arquivo utilize >
echo " olá, tom"
read.txt
cat read.txt então o out put é
hello tom
Pode utilizar o >> operador. Isto irá anexar dados de um comando ao fim de um ficheiro de texto.
Para testar esta tentativa, tente correr:
echo "Hi this is a test" >> textfile.txt
Faça isto um par de vezes e depois corra:
cat textfile.txt
Você'verá que o seu texto foi anexado várias vezes ao ficheiro textfile.txt.
Utilize command >> file_to_append_to
para anexar a um arquivo.
Por exemplo `echo "Hello"
testFile.txt`
CAUTION: se você utilizar apenas um único >
você irá sobrescrever completamente o conteúdo do arquivo.
Para garantir que isso não'nunca aconteça, você pode adicionar set -o noclobber
ao seu .bashrc
.
Isso garante que se você acidentalmente digitar command > file_to_append_to
a um arquivo existente, ele irá alertá-lo de que o arquivo já existe.
Exemplo de mensagem de erro:
file exists': testFile.txt
Assim, quando você utiliza >
isso só lhe permitirá criar um novo arquivo, e não sobrescrever um arquivo existente.
para toda a questão:
cmd >> o.txt && [[ $(wc -l <o.txt) -eq 720 ]] && mv o.txt $(date +%F).o.txt
isto anexará 720 linhas (30*24) no o.txt e depois renomeará o arquivo com base na data atual.
Execute o acima com o cron a cada hora, ou
while :
do
cmd >> o.txt && [[ $(wc -l <o.txt) -eq 720 ]] && mv o.txt $(date +%F).o.txt
sleep 3600
done
Usar tee com a opção -a (--append) permite anexar a vários arquivos ao mesmo tempo e também usar **sudo*** (muito útil ao anexar a arquivos protegidos). Além disso, é interessante se você precisar usar outros shells além do bash, pois nem todos os shells suportam o > e >> operadores
echo "hello world" | sudo tee -a output.txt
Este [fio][1] tem boas respostas sobre o tee
[1]: https://askubuntu.com/questions/408340/is-there-any-significance-to-using-tee
Eu utilizaria printf ao invés de echo porque ele's [mais confiável][1] e formatação de processos como a nova linha `\n' propriamente dita.
Este exemplo produz uma saída semelhante à echo em exemplos anteriores:
printf "hello world" >> read.txt
cat read.txt
hello world
No entanto, se você substituísse printf por echo neste exemplo, echo trataria \n como uma corda, ignorando assim a intenção
printf "hello\nworld" >> read.txt
cat read.txt
hello
world
[1]: https://unix.stackexchange.com/questions/65803/why-is-printf-better-than-echo
Por exemplo, o seu ficheiro contém :
1. mangesh@001:~$ cat output.txt
1
2
EOF
se você quiser anexar no final do arquivo, então ---->lembre-se dos espaços entre 'text'
'filename'
2. mangesh@001:~$ echo somthing to append >> output.txt|cat output.txt
1
2
EOF
somthing to append
E para sobrescrever o conteúdo do ficheiro :
3. mangesh@001:~$ echo 'somthing new to write' > output.tx|cat output.tx
somthing new to write
I'sugeriria que fizesse duas coisas:
>>
no seu script shell para anexar conteúdo a um arquivo em particular.
O nome do arquivo pode ser corrigido ou utilizando algum padrão.Configure um cronjob de hora em hora para acionar o script da shell