【问题标题】:renaming files with a (~) after the extension在扩展名后使用 (~) 重命名文件
【发布时间】:2017-04-23 10:52:09
【问题描述】:

我有大约 3500 个文件(.doc .xls .pdf 等),它们的扩展名后都有一个“~”。即 blahblah.doc~ , blahblah.xls~ 我对正则表达式不够熟悉,无法正确获取语法。在 bash shell 中执行此操作的最简单的命令/脚本是什么。非常感谢。

【问题讨论】:

  • 我们谈论的是同一个文件夹中的文件吗?什么操作系统,Linux?
  • 如果总是以~ 结尾,请使用(?:.+\..+~$) ;)。
  • 我应该说,最终目标是重命名所有文件,不带尾随波浪号 (~)
  • 如果您一般熟悉 bash 中的脚本,但不是特别熟悉正则表达式(您的问题暗示),那么一般字符串操作呢 - 只是长度为 1 的子字符串。
  • 有多个文件夹,是的 OS id linux (Debian)

标签: regex rename


【解决方案1】:

应该这样做

rename -n 's/~$//' *.*

如果您真的想进行更改,显然您需要删除-n。否则它将显示将更改的文件而无需触摸它们

【讨论】:

  • rename -n 's/(.*)~$/$1/' . 似乎确实有效,它显示了我想要的。我要删除哪一部分以便将其写出来?
  • @BPatton 您需要删除 -n 。我稍微简化了正则表达式。检查更新的正则表达式
  • 啊,不会“找到 .-iname .*~ | rename 's/^(.)~$/$1/' . 能够遍历目录结构并更改所有以 ~! 结尾的文件!
  • 当我运行它时它在目录中工作,(不使用 find.......)幸运的是,没有那么多目录,这对我来说太晚了.我的同事正在休假,因此我只能自己弄清楚。我感谢您的帮助。非常感谢。
【解决方案2】:

如果你有子目录,你也可以使用这个 python 脚本: 它的作用是检查文件是否有〜,如果有,它将使用python的系统删除最后一个字符,因此只有在最后一个字符中只有一个〜波浪号时它才会起作用。或者,您可以使用 name.Endswith("~")

import os
from os.path import join

for root, dirs, files in os.walk('path_to_parent_directory'):
    for name in files:
        #print (name) // for checking filenames
        if "~" in name: 
            os.rename(join(root,name),join(root,name[:-1]))

【讨论】:

  • 这会将ab~cd重命名为ab~c
  • 这将用 abc 重命名 abc~,正如我在答案中所解释的那样。如果您想更加谨慎,可以使用 Endswith
猜你喜欢
  • 1970-01-01
  • 2013-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-29
  • 2014-05-29
  • 2016-11-06
  • 1970-01-01
相关资源
最近更新 更多