替换所有文件中的新行字符(^M),然后根据字符字符串重命名文件

替换所有文件中的新行字符(^M),然后根据字符字符串重命名文件

我不是一个 UNIX 爱好者,但对 UNIX 的理解足以到处编写小脚本,除了这个,我个人可能无法投入足够的时间。

我的目录中有大约 2000 个文件,需要对其执行以下操作:

  1. 每个文件大约有 3000 条记录,但所有记录都在每个文件的一行上,并用 Ctrl M 换行符分隔。这些需要分开。
  2. 每个文件在第一行中从第 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

相关内容