对所有文件应用相同的分隔符

对所有文件应用相同的分隔符

我在不同的子目录中有几个文件。其中一些文件有一个制表符分隔符,只有一个“制表符”,如下所示:

1971 1 1 120
1971 1 2 148
1971 1 3 159,5
...

其他的都有 7 个“制表符”的制表符分隔符,如下所示:

1971       1       1       120
1971       1       2       148
...

有没有办法将相同的“tab”分隔符应用于所有子目录的所有文件?

答案1

使用find+ rename

find . -type f -exec rename -n 's/\t{2,}/\t/g' {} \;
  • find:搜索目录层次结构
  • .:搜索当前工作目录
  • -type f:仅搜索文件
  • -exec [...] {} [...] \;:对每个结果执行一条命令;
  • rename:重命名文件或目录
  • -n:进行试运行
  • s/\t{2,}/\t/g:用一个制表符替换任意次数出现的两个或更多个制表符;

如果结果符合预期,则删除该-n选项。

示例输出(\011= \t):

% tree                                             
.
├── 1
│   ├── 1\0111\011\0111
│   ├── 1\0111\011\0112
│   ├── 1\0111\011\0113
│   ├── 1\0112\011\0111
│   ├── 1\0112\011\0112
│   ├── 1\0112\011\0113
│   ├── 1\0113\011\0111
│   ├── 1\0113\011\0112
│   └── 1\0113\011\0113
├── 2
│   ├── 2\0111\011\0111
│   ├── 2\0111\011\0112
│   ├── 2\0111\011\0113
│   ├── 2\0112\011\0111
│   ├── 2\0112\011\0112
│   ├── 2\0112\011\0113
│   ├── 2\0113\011\0111
│   ├── 2\0113\011\0112
│   └── 2\0113\011\0113
└── 3
    ├── 3\0111\011\0111
    ├── 3\0111\011\0112
    ├── 3\0111\011\0113
    ├── 3\0112\011\0111
    ├── 3\0112\011\0112
    ├── 3\0112\011\0113
    ├── 3\0113\011\0111
    ├── 3\0113\011\0112
    └── 3\0113\011\0113

3 directories, 27 files
% find . -type f -exec rename 's/\t{2,}/\t/g' {} \; 
% tree
.
├── 1
│   ├── 1\0111\0111
│   ├── 1\0111\0112
│   ├── 1\0111\0113
│   ├── 1\0112\0111
│   ├── 1\0112\0112
│   ├── 1\0112\0113
│   ├── 1\0113\0111
│   ├── 1\0113\0112
│   └── 1\0113\0113
├── 2
│   ├── 2\0111\0111
│   ├── 2\0111\0112
│   ├── 2\0111\0113
│   ├── 2\0112\0111
│   ├── 2\0112\0112
│   ├── 2\0112\0113
│   ├── 2\0113\0111
│   ├── 2\0113\0112
│   └── 2\0113\0113
└── 3
    ├── 3\0111\0111
    ├── 3\0111\0112
    ├── 3\0111\0113
    ├── 3\0112\0111
    ├── 3\0112\0112
    ├── 3\0112\0113
    ├── 3\0113\0111
    ├── 3\0113\0112
    └── 3\0113\0113

3 directories, 27 files

相关内容