借助 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
相关推荐
用于对文件的批量处理,可以对照片等文件实现批量重命名,需安装pandas,提升办公效率,促进办公自动化。经过多次修改,很好用。
解决LINUX中中文显示乱码的问题。
linux下中文乱码问题,全面的讲解了linux中文乱码的解决方法,
Linux 删除乱码文件与文件夹.docx
解决linux中文乱码,讲述Ubuntu下安装java字体配置
批量重命名文件夹或文件。 将这个批处理文件放到你要批量更改文件的文件夹内,双击运行。 会同步修改所有子文件夹名称,以及所有子文件夹内的文件名。 如果双击运行乱码,将文件另存为ANSI。
如果你有很多Big5码(台湾用)的文章(这一个版本只考虑了txt文本格式的文件),可以用这个软件很快把它们全部转换成GB码文件。
Linux下中文文件名乱码问题的详解 - CSDN博客原创2016年06月12日 09:59:40标签:压缩 / linux / 乱码Linux下中文文件名乱码
解决linux环境中出现中文乱码的情况。
解决linux下oracle中文乱码问题,添加中文支持解决linux下oracle中文乱码问题,添加中文支持解决linux下oracle中文乱码问题,添加中文支持解决linux下oracle中文乱码问题,添加中文支持解决linux下oracle中文乱码...
Linux中文乱码问题.pdf
该脚本的主要功能是:把下载的文件重命名为“真实名称.mp3” 使用方法: 1.将喜马拉雅下载的文件打包上传到虚拟机上并解压 2.将该脚本ximalaya.py放置于同层文件夹 3.修改userid为您的实际ID, 4.运行脚本
Linux中的中文文件在ssh终端中显示为乱码。原本在Windows中显示正常的文件,上传到Linux中之后,全变成乱码,有什么好的解决方法呢,经过本人多次实验,终于得到一个解决方法
喜马拉雅听书下载文件提取重命名
VMware Workstation自动安装和Linux中文乱码问题
使用C+解决Linux中文乱码问题.docx
excel打开csv文件中文乱码问题,将乱码文件拖到此工具就可完成转码,正常显示中文。
可以帮助你转换由于Windows与Linux文件编码不兼容导致的乱码,批量转换文件编码的工具。基于GTK+适用于linux
SecureCRT连接Linux出现乱码解决方法