重命名文件:删除第一个下划线之前的名称

问题描述 投票:0回答:1

我有数千个文件需要重命名。 它们的形式为xxxxx_文件名.doc

xxxx 是字母数字,但 在所有情况下,如果可能,需要删除直到并包括第一个下划线的前缀。某些文件最终会出现重复的名称,因此重要的是任何重复项都不会覆盖现有文件(应忽略它们)。

如果没有下划线,则应跳过。

examples:
3445sh0_may_receipts.doc
df784hb68_sample.file-name.doc
b6890zs22_sample file name.doc
b6890zs22_sample_name.doc
gh7856n77.doc
56n57swd0.doc
etc ...

我对awk的使用并不熟练,但似乎awk可能会使用下划线作为分隔符,并忽略第一列到第一个下划线。我不知道如果发现重复文件 awk 会做什么。

awk sed file-rename
1个回答
0
投票

假设您有这些文件:

$ ls -1
3445sh0_may_receipts.doc
b6890zs22_sample file name.doc
b6890zs22_sample_name.doc
df784hb68_sample.file-name.doc
gh7856n77.doc

您可以:

  1. 使用 glob 跳过名称中没有
    _
    的文件;
  2. 使用参数扩展删除前导部分
    xxxx_
    ;
  3. 据此重命名文件。

所以:

for fn in *_*; do
    mv "$fn" "${fn#*_}" 
done   

结果:

$ ls -1
gh7856n77.doc
may_receipts.doc
sample file name.doc
sample.file-name.doc
sample_name.doc
© www.soinside.com 2019 - 2024. All rights reserved.