%20em%20todos%20os%20arquivos%20e%20renomeie%20o%20arquivo%20com%20base%20na%20string%20char.png)
Não sou um cara de UNIX, mas entendo o suficiente para criar pequenos scripts aqui e ali, exceto este, onde pessoalmente posso não conseguir dedicar tempo suficiente.
Tenho cerca de 2.000 arquivos em um diretório no qual o seguinte precisa ser feito:
- Cada arquivo tem cerca de 3.000 registros, mas todos estão em uma linha de cada arquivo separados pelo caractere de nova linha Ctrl M. Eles precisam ser separados.
- Cada arquivo tem a data correspondente em que foi gerado na primeira linha, começando do 8º ao 14º caracter. Esta data precisa ser usada para renomear o arquivo para XXX_YYYYMMDD_AAA.txt
Responder1
A maioria dos sistemas inclui uma ferramenta chamada dos2unix
que você pode "iniciar" em um script para processar os arquivos necessários para executar esta operação.
Se os arquivos estiverem todos em um diretório, você poderá find
localizá-los e operar cada um individualmente, assim:
$ find . -type f -exec dos2unix {} +
Exemplo
Digamos que eu tivesse essa estrutura de diretórios
$ tree
.
|-- afile
|-- dir1
| `-- afile
`-- dir2
`-- afile
Podemos usar nossa find
técnica para confirmar que todos os arquivos são arquivos "DOS" com terminação de linha CRLF.
$ find . -type f -exec file {} +
./dir2/afile: ASCII text, with CRLF line terminators
./afile: ASCII text, with CRLF line terminators
./dir1/afile: ASCII text, with CRLF line terminators
E repare tudo assim:
$ find . -type f -exec dos2unix {} +
dos2unix: converting file ./dir2/afile to Unix format ...
dos2unix: converting file ./afile to Unix format ...
dos2unix: converting file ./dir1/afile to Unix format ...
Resultando apenas em arquivos Unix:
$ find . -type f -exec file {} +
./dir2/afile: ASCII text
./afile: ASCII text
./dir1/afile: ASCII text