文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>命令行下处理乱码文件

命令行下处理乱码文件

时间:2010-05-29  来源:pkuwwt

在linux下常会遇到文件名乱码的文件,比如从网上下载,或者解压缩。当然,这多半与中文编码有关。一般我们会选择删除或重命名这些文件,但好像一般都是用鼠标点到文件管理器中,再手动删除或重命名的。这对于双手习惯不离键盘的人们来说,无疑是种煎熬。

在命令行下操作文件名乱码的文件,主要的困难在于无法准确地获取文件名。在删除文件的时候有一个笨办法

rm -i *


这是删除所有文件,但是每个文件删除之前都要让你回答一下。但如果想重命名文件就没那么好办了。

解决办法不是没有,那就是使用find命令。find命令有一个-inum选项,它是根据文件的inode来搜索文件名,并且,find还有-exec选项,支持对搜索到的文件执行某些命令。
首先,要通过dir获取inode值

dir -i *


假设某文件名乱码的文件的inode为12345,那么将其重命名和删除的命令分别为

find . -inum 12345 -exec mv {} newFileName \;

find . -inum 12345 -exec rm {} \;


注意,最后的分号不是bash中的分号运算符,而是find命令本身的一部分,所以要用转义以示区分。中间的一对大括号用来代替find搜索到的文件名。

如果每次都写这么长的命令确实挺烦的,你可以将其缩写成一条命令。

alias imv="mvfile(){ find . -inum \$1 -exec mv {} \$2 \;;}; mvfile "

alias irm="rmfile(){ find . -inum \$1 -exec rm {} \;;}; rmfile "


这里的$1, $2就是bash里的第一个参数和第二个参数。这里需要注意几点,第一点是,函数中的$1将脚本中的$1给覆盖了,即这里的$1是用户定义的函数(比如mvfile)的第一个参数。第二点是,之所以要对$1和$2转义,是因为函数定义嵌套在一个字符串中,bash解释器首先要解析alias命令,若不对$1进行转义,$1将被解析为脚本中的参数,显然这并非我们的意图。待alias的解析完成之后,就只剩下一个完整的函数定义了。另外,注意find前面有一个空格。
   当然,你也可以将函数定义单独拿出来,这时候是不需要转义的,但这个函数明显不会用于其它地方,最好还是不要增加系统的負担了。

你可以把上面的两条alias語句放到~/.bashrc中,然后你就可以方便地用自定义的命令执行重命令和删除操作了

imv 12345 newFileName

irm 12345


相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载