借助 find 命令,获取文件的索引编号,Linux下每个文件都有一个编号, 通过 ls -i 可以同时列出文件名和索引编号,
比如,下载了一个壁纸包,里面的壁纸都是乱码,在windows下应该是正常的。
ls -i 一下,可以看到:
查看到的文件有乱码,输出的每一行有一个index编号,就是每一个linux下文件都有的编号。现在用 awk 来构造新的名字,去掉其中的乱码字符只留下数字:
ls -i | awk '{gsub(/[\(\)]/,"", $3); print $3 }'
# 注:这里 $0 是整个索引编号加文件名,而 $1就是索引编号, $2为中文乱码名,我猜想中文名中有空格,如果你的中文乱码不是这里的,就要做相应的修改,可以自己定义一个变量 i,然后i++即可!$3为括号加数字,这里我用 gsub过滤掉所有括号,只留下数字,现在看看打印出来的效果!
太长了就省略掉其他部分
现在利用find重命名功能:
比如知道一个文件的索引编号,可以这样写:
find . -inum 492635 -exec mv {} newfilename \;
find命令网络上很多 , 点号表示当前目录, find . -inum 后跟你需要重命名的索引编号,因为这个编号是唯一的,所以只会查出来一个文件,不会有多个文件重复问题,后面的 -exec 表示找到文件后,执行的命令,这里执行 shell 的 mv , 移动命令,{} 代表找出来的文件名, 然后是你需要重命名的新文件名,最后是 \; 前面有一个空格。
现在用awk来批量构造出这一个命令吧!
ls -i | awk '{gsub(/[\(\)]/,"", $3); print "find . -inum ",$1, "-exec mv {}", $3 ,"\;"}'
注意:截图中漏掉了find . 后面那个横杠 一定要有!
awk 已经构造出了每一个文件重命名的语句,现在只需要把这条语句再通过管道转接给shell就可以搞定啦!直接在后面加上 | sh 即可!
ls -i | awk '{gsub(/[\(\)]/,"", $3); print "find . -inum ",$1, "-exec mv {}", $3 ,"\;"}' | sh
运行,然后ls一下看看。
ok,现在所有文件都正常了,而且,没有搞乱原来的顺序哦,因为原来的编号还在,
当然有些文件是没有编号的,而且是不可以直接分割出来编号的,这个时候,可以通过自定义一个变量 i 或者使用awk内部变量 NR(当前处理的行号)来实现。
比如:
ls -i | awk '{ printf("find . -inum %s -exec mv {} %03d.jpg \;\n", $1, NR)}'
或者使用
ls -i | awk '{printf("find . -inum %s -exec mv {} %03d.jpg \;\n", $1, ++i)}'
效果一样,注意,awk使用变量无须定义,直接++i,awk会自动将i初始化为0,这样++i第一行得到的是 1,
后面跟随的是文件扩展名 jpg,如果你的文件扩展名是不固定的,可以利用gsub提取出扩展名然后追加上去,效果一样,最后来一条通用的批量重命名:
文件名宽度是三位数字,不足的前补0.
ls -i | awk '{filename=$0; gsub(/.+\./,"", filename); printf("find . -inum %s -exec mv {} %03d.%s \;\n", $1, NR, filename)}'
这句命令的意思,把 $0 即整个文件名和索引编号,赋值给 filename , 然后通过 gsub过滤掉.号之前的任意字符,即filename只剩下扩展名,当然如果有多个扩展名的话,比如,.tar.gz 这类,就需要小心了。
看到生成的语句都很正常,下一步只需要添加 | sh 就可以完成命令功能了!
ls -i | awk '{filename=$0; gsub(/.+\./,"", filename); printf("find . -inum %s -exec mv {} %03d.%s \;\n", $1, NR, filename)}' | sh
相关推荐
- **rename指令**:`rename`命令可以批量重命名文件。若文件名包含乱码,可以先用`iconv`转换文件名的编码,再使用`rename`进行重命名。 6. **使用图形界面工具** 对于不熟悉命令行操作的用户,可以使用支持多种...
Linux 转换 Windows 文件编码格式脚本是将 Windows 上的文件编码格式转换为 UTF-8 编码,以便在移植 Windows 代码到 Linux 下时避免注释代码乱码和编码格式引起的编译错误。 该脚本使用 Bash shell 脚本语言编写,...
### Linux下批量修改文件编码 在Linux环境下,批量修改文件编码是常见的操作需求之一,尤其在处理不同系统间文件交互时尤为重要。本文将详细介绍如何在Linux下实现文件编码的批量转换,并通过一个具体示例来展示...
【标题】"iRename for mac" 是一个专为Mac用户设计的文件批量重命名工具,尤其针对处理含有中文字符导致的乱码问题。在日常工作中,我们经常遇到因编码问题而导致的文件名显示异常,这在下载网络资源,尤其是包含...
如果链接的文件被移动、重命名或删除,Excel无法找到该位置,因此超链接会显示为错误。 "Excel文件超链接修复器"的工作流程可能包括以下几个步骤: 1. **扫描文件**:程序首先读取目标Excel文件,识别并提取所有...
1. 在进行批量转换时,务必谨慎,因为错误的编码设置可能导致文件名丢失或重命名错误。 2. 对于已经包含特殊字符的文件名,转换可能会有风险,因此建议先备份重要文件。 3. 转换过程中,如果遇到权限问题,可能需要...
- **文件操作**:连接成功后,即可在本地和远程目录之间进行文件的上传、下载、重命名、删除等操作。 **3. Linux远程文件传输** - **SSH连接**:Xftp通过SSH(Secure Shell)连接Linux服务器,提供安全的远程登录...
文件上传:多文件批量上传;html5拖拽上传(拖拽到窗口实现无缝上传) 右键功能:文件右键,文件夹右键,多选后右键操作,桌面右键,树目录右键操作,右键菜单绑定快捷键 (全选——复制——剪切——粘贴——删除——重命名,...
文件上传:多文件批量上传;html5拖拽上传(拖拽到窗口实现无缝上传) 右键功能:文件右键,文件夹右键,多选后右键操作,桌面右键,树目录右键操作,右键菜单绑定快捷键 (全选——复制——剪切——粘贴——删除——重命名,...
文件上传:多文件批量上传;html5拖拽上传(拖拽到窗口实现无缝上传) 右键功能:文件右键,文件夹右键,多选后右键操作,桌面右键,树目录右键操作,右键菜单绑定快捷键 (全选——复制——剪切——粘贴——删除——重命名,...
4. 文件重命名:根据标签信息重命名MP3文件,使其文件名与内容一致。 5. 多语言支持:由于是开源项目,用户可能已经贡献了多种语言的界面翻译。 6. 兼容性:能够处理不同编码的MP3文件,避免字符乱码问题。 对于...
文件上传:多文件批量上传;html5拖拽上传(拖拽到窗口实现无缝上传) 右键功能:文件右键,文件夹右键,多选后右键操作,桌面右键,树目录右键操作,右键菜单绑定快捷键 (全选——复制——剪切——粘贴——删除——重命名,...
实例112 解决用substr()函数对中文字符串截取时出现乱码的问题 143 实例113 字符串与HTML标记相互转换 144 实例114 运用PHP 5.0新型字符串输出XML数据 145 实例115 判断字符串中是否存在指定子串 146 2.9 正则表达式...
实例112 解决用substr()函数对中文字符串截取时出现乱码的问题 143 实例113 字符串与HTML标记相互转换 144 实例114 运用PHP 5.0新型字符串输出XML数据 145 实例115 判断字符串中是否存在指定子串 146 2.9 正则表达式...
符号重命名程序(resym.exe)增加对.obj文件的支持,并更新了文档(sdk\static_docs)。 3. 编译生成安装软件时已支持打包静态编译后的程序,但需事先静态编译出该程序。 4. 升级加密狗驱动程序,增加了对 Windows 7,...