我有几百个文件,分别名为 hortstu01-01-14 和 hortstu01-02-14...你明白了吗?
那么,一半的文件名为 hortstu_01-03-14,然后是 hortstu_01-04-14。
这搞乱了按名称对文件进行排序并按我希望的顺序排列文件。所以我想将没有下划线的文件重命名为 hortstu_
是否可以批量执行此操作? 如果可以,该怎么做?
答案1
打开终端。首先,rename
通过输入仔细检查您是否有 perl man rename
。底部应该显示perl v5.18.2
或类似内容。(我认为 Ubuntu 总是附带 perl rename
,但其他发行版附带其他版本。)
如果版本正确,则cd
转到包含这些文件的目录。然后运行
rename 's/^hortstu/hortstu_/' hortstu[!_]*
解释
- 这将重命名所有匹配的文件
hortstu[!_]*
。这意味着以 开头的文件hortstu
,并且不是有_
下一个。 - 然后它将通过以下方式重命名它们
- 查找
^hortstu
(即hortstu
在字符串的开头) - 将其替换为
hortstu_
。
- 查找
- 注意:格式
hortstu[!_]*
为重击。的格式^hortstu
是正则表达式。
答案2
或者使用 Bash 单行程序导航到包含文件的文件夹,然后在终端中运行此命令:
for file in hortsu*;do echo "$file" "${file/_/-}";done;
基本上,对于名称为“hortsu”且后跟任意字符“*”的文件,此命令会回显“$file”的名称以及文件名称,其中所有下划线均替换为破折号。当您对此感到满意时,只需将其替换echo
为cp
即可将文件复制到新名称。
一个 Python 式的解决方案。
在安全的环境中尝试此操作,也许将一两个文件复制到新文件夹以测试其工作原理。
将以下代码保存在 gedit 中,并为其命名一个带有“.py”文件扩展名的名称,例如rename_files_in_current_directory.py
:
# copy this code into gedit and save it to the directory with the files in it
import os
# for files in the current directory ('.')
for file_names in os.listdir('.'):
if '_' in file_names:
# using os.system use cp (copy) to copy file_names to file-names by replacing
# underscore with dash
os.system('cp '+file_names+' '+file_names.replace('_','-'))
确保已安装 python。'sudo apt-get install python'
在终端中导航到包含脚本和文件的文件夹,然后运行:
python the_name_given_to_the_python_script.py
笔记:
您可以删除上述命令中的破折号,脚本将删除下划线。
for file in hortsu*;do cp "$file" "${file/_/}";done;
或者在python脚本中更改:
file_names.replace('_','-')
到file_names.replace('_','')
答案3
对于那些喜欢 GUI 应用程序或只是喜欢预览结果的人来说,您可能想要安装 Thunar。它是 XFCE 的主要文件管理器;您可以在存储库中找到它。
当您在 Thunar 中选择多个文件并重命名它们(通过上下文菜单或 F2)时,您将看到一个精心设计的对话框,它支持各种重命名操作。您可以像这样解决问题: