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