作者:北亚数据恢复中心([url]http://www.datahf.net[/url], tel:4006505808)
前一段时间遇到一个批量修改文件名的,是一台debian文件服务器,为mac提供文件共享服务,其中的汉字部分采用编码方式(查了下资料,应该是的,没有去实际验证),具体的编码原则如下:
一个存储于linux服务器中的字符名称为Product_List:b2:fa:c6:b7:c4:bf:c2:bc,编码方式为CP936,但已经不会有中文了。编码的转换方式为:后面的两位字符就是对应CP936字符集的一个字符(半个汉字)的HEX内码,如上面文件名转换后应该为:Product_List产品目录,见下面转换方式。
内码                                           GB2312
00000000   B2 FA C6 B7 C4 BF C2 BC   产品目录
00000008   00 00 00 00 00 00 00 00   ........
 
  本案例中因存储结构变更,需要重新整理,同时原先的MAC平台及DEBIAN平台均已报废多久(这部分数据是存档数据),所以需要有一种手段将文件名称转换为正常的字符集。
  我的思路是:先用find查找所有的含":"的文件或目录名称,再用mv将文件名中的":"批量替换为"%",最后通过convmv将字符转换为正常的CP936编码字。
  因最近整理资料时发现这个案例,很郁闷的是,最终的程序方案已经早被我删除了,无法恢复出来了(亏了我这个数据恢复专家的名头了,呵呵)。只找到个草稿,先记下来,以后遇到类似情况待查。如果有更好的建议、意见,留言给我。
   假设生成的sh文件名为t.sh,内容大致为:
 
   echo >/testsh/t1.sh
   echo >/testsh/t2.sh
   find $1 -depth -type $2 -name "*\:*" -exec $3 {} \;|while read -r linet
   do
   line="`echo "$linet"|sed -e 's#)#\\\\)#g' -e 's/(/\\\\(/g' -e 's/&/\\\\&/g' -e 's/:/\\\\:/g' -e "s/'/\\\\\'/g"`"
   echo "mv "$line"  "`echo "$line"|sed -e 's/\:/%/g' -e 's/\^M//g'`"   ;" >>/testsh/t1.sh
   echo "convmv --notest --unescape "`echo "$line"|sed 's/\:/%/g'`" ;" >>/testsh/t2.sh
   done
   chmod +x /testsh/t1.sh
   /testsh/t1.sh
   chmod +x /testsh/t2.sh
   /testsh/t2.sh
 
  执行上面的sh 后,会生成t1.sh与t2.sh,先不断的执行“t.sh  /data_dir d echo”,等全部执行完成后,再执行“t.sh  /data_dir f echo”。
记得直正解决问题时,修正了好多问题,现在也想不太起来了,但思路还是可行的。暂时就这样记录吧。

SHELL编程实现批量Netatalk字符集文件名替换相关推荐

  1. php批量替换文件内容,Shell脚本实现批量替换文件内容

    Shell脚本实现批量替换文件内容 今天同事发现内部服务器的硬盘空间不够了,上面有很多备份,我又不能删除,重新找了个320g的硬盘挂载了上,想以后shell脚本下的备份都转移到新硬盘上,给老硬盘腾出空 ...

  2. Shell编程面试题4_批量创建Linux用户并设置密码

    老男孩出的Shell编程企业面试题4: 批量创建10个系统帐号oldboy01-oldboy10并设置密码(密码为随机8位字符串). 我的Shell脚本如下: #!/bin/bashfor num i ...

  3. Shell编程进阶篇(完结)

    1.1 for循环语句 在计算机科学中,for循环(英语:for loop)是一种编程语言的迭代陈述,能够让程式码反复的执行. 它跟其他的循环,如while循环,最大的不同,是它拥有一个循环计数器,或 ...

  4. shell编程基础-简述

    1.1 前言 1.1.1 为什么学Shell Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, Linux/UNIX系统的底层及基础应用软件的核心大都涉及Shell脚 ...

  5. Shell编程入门基础上

    前言 为什么学 Shell Shell 脚本语言是实现 Linux/UNIX 系统管理及自动化运维所必备的重要工具, Linux/UNIX 系统的底层及基础应用软件的核心大都涉及 Shell 脚本的内 ...

  6. 超级详细的 shell编程知识讲解 —— 第二部分(全文3万多字,看完之后不想成为高手也难!)

    文章目录 写在开头的话 shell 编程进阶 00. 正则表达式 0.1 概述 0.2 基础正则表达式 0.3 扩展正则表达式 01.字符截取和替换命令 1.1 `cut` 列提取命令 1.2 `aw ...

  7. shell编程,实战高级进阶教学

    shell编程从入门到高级教程 一.shell编程初识 1.1 shell能做什么 1. 自动化批量系统初始化程序 (update,软件安装,时区设置,安全策略...) 2. 自动化批量软件部署程序 ...

  8. Linux高级专题详解--shell编程大全(shell变量,if语句,case语句,for循环,while循环,函数调用,数组,正则表达式,shell脚本三剑客--grep,sed,awk家族)

    shell编程 初始shell 程序 语言 编程 ---------------------------------- 语言 自然语言:汉语.英语 计算机语言:c语言.c++.(java php py ...

  9. shell编程-大杂烩

    ip link显示的数据来源 # ll /sys/class/net lrwxrwxrwx 1 root root 0 Aug 24 10:02 ens3 -> ../../devices/pc ...

最新文章

  1. 1人15篇入选?华人论文知多少?深度分析ICCV2019论文录取背后的那些事儿!
  2. 按需生产 ,我们准备好了吗?
  3. python【蓝桥杯vip练习题库】ALGO-66字符串编辑
  4. reshape2 数据操作 数据融合( cast)
  5. jvm在创建对象时采用哪些并发安全机制
  6. C# winform引用com组件,创建AXHOST组件失败解决方案
  7. Pandas之:深入理解Pandas的数据结构
  8. 您一直在寻找5+个简单的一线工具来提升Python可视化效果
  9. 埃森哲携手阿里云,采用K8s容器云服务为客户提供无限弹性
  10. Jmeter——将Fiddeler作为代理服务器
  11. 20145201 《Java程序设计》第六周学习总结
  12. java 方法 内部类,Java 面向对象 之 方法中内部类
  13. 《数字图像处理 第三版》(冈萨雷斯)——第三章 灰度变换和空间滤波
  14. Vue导出excel表格设置样式的解决方案
  15. 工业App能否成为继Android和iOS后下一个App开发者的春天?
  16. 中国移动云mas短信对接(http)
  17. 计算机休眠后无法唤醒出现蓝屏,笔记本电脑进入睡眠,唤醒后出现蓝屏怎么回事?...
  18. js实现点击图片在屏幕中放大
  19. 桥接路由器总是掉线_无线路由器桥接完整教程(不会断网)【图文详解】
  20. Gitlab下新建project并上传本地project整理

热门文章

  1. COALESCE操作符
  2. asp.net mvc处理css和js版本问题
  3. PYTHON 高效编程
  4. COM 与 COM+ 区别
  5. linux配置gprs modem
  6. Markdown用法
  7. <scope>test</scope>的作用
  8. vue的钩子函数created以及mounted的示意(转载)
  9. 人脸识别报错cascadedetect.cpp:1698: error: (-215) !empty() in function detectMultiScale
  10. oracle hr样本模式,Oracle 样本模式 HR