我不是一个 UNIX 爱好者,但对 UNIX 的理解足以到处编写小脚本,除了这个,我个人可能无法投入足够的时间。
我的目录中有大约 2000 个文件,需要对其执行以下操作:
- 每个文件大约有 3000 条记录,但所有记录都在每个文件的一行上,并用 Ctrl M 换行符分隔。这些需要分开。
- 每个文件在第一行中从第 8 个字符到第 14 个字符都有相应的生成日期。需要使用此日期将文件重命名为 XXX_YYYYMMDD_AAA.txt
答案1
大多数系统都包含一个名为“gin up”的工具dos2unix
,您可以在脚本中“gin up”该工具来处理执行此操作所需的文件。
如果这些文件都在一个目录中,您可以使用find
它来定位它们,然后分别对每个文件进行操作,如下所示:
$ find . -type f -exec dos2unix {} +
例子
假设我有这个目录结构
$ tree
.
|-- afile
|-- dir1
| `-- afile
`-- dir2
`-- afile
我们可以使用我们的find
技术来确认所有文件都是带有 CRLF 行终止符的“DOS”文件。
$ 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