%20%D0%B2%D0%BE%20%D0%B2%D1%81%D0%B5%D1%85%20%D1%84%D0%B0%D0%B9%D0%BB%D0%B0%D1%85%2C%20%D0%B0%20%D0%B7%D0%B0%D1%82%D0%B5%D0%BC%20%D0%BF%D0%B5%D1%80%D0%B5%D0%B8%D0%BC%D0%B5%D0%BD%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D1%84%D0%B0%D0%B9%D0%BB%20%D0%BD%D0%B0%20%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B5%20%D1%8D%D1%82%D0%BE%D0%B9%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8..png)
Я не специалист по UNIX, но понимаю достаточно, чтобы время от времени писать небольшие скрипты, за исключением этого, на который я лично, возможно, не смогу выделить достаточно времени.
У меня в каталоге около 2000 файлов, с которыми нужно сделать следующее:
- Каждый файл содержит около 3000 записей, но все они находятся на одной строке каждого файла и разделены символом новой строки Ctrl M. Их необходимо разделить.
- Каждый файл имеет соответствующую дату, когда он был сгенерирован в первой строке, начиная с 8-го символа по 14-й символ. Эту дату нужно использовать для переименования файла в XXX_YYYYMMDD_AAA.txt
решение1
Большинство систем включают в себя инструмент, dos2unix
который вы можете «включить» в скрипт для обработки файлов, над которыми вам нужно выполнить эту операцию.
Если все файлы находятся в одном каталоге, вы можете использовать команду , find
чтобы найти их, а затем работать с каждым из них по отдельности, например, так:
$ find . -type f -exec dos2unix {} +
Пример
Допустим, у меня есть такая структура каталогов
$ tree
.
|-- afile
|-- dir1
| `-- afile
`-- dir2
`-- afile
Мы можем использовать нашу find
методику, чтобы подтвердить, что все файлы являются файлами «DOS» с завершением строки 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
И отремонтировать все вот так:
$ 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 ...
В результате получаются только файлы Unix:
$ find . -type f -exec file {} +
./dir2/afile: ASCII text
./afile: ASCII text
./dir1/afile: ASCII text