代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Shell
】
文件批量复制并转换内容编码
作者:
Duncan
/ 发布于
2014/11/18
/
759
批量、递归 (不追溯链接) 复制文件;改变复制出的文件的内容编码;使用旧文件的 m 时间戳。可以修改“convertOrNot()”函数,过滤掉不想转换的文件。
#调用办法 export SRC="/media/sdb13/tmp_transfer/123.name_UTF8_content_GB18030"; export DES="/ext/usr/convert/old_laptop.123.name_UTF8_content_UTF8"; echo "SRC=\\"$SRC\\""; echo "DES=\\"$DES\\""; date; sh ./tfw_iconv_cp.sh "$SRC" "$DES" gb18030 utf8>tfw_iconv_cp.log 2>tfw_iconv_cp.err; date; #功能 intCount=0; tfw_deep_demo() { local strSrcFileName="$1"; local strDesFileName="$2"; local strFromEncoding="$3"; local strToEncoding="$4"; if [ -z "$strSrcFileName" ]; then processLength0 "$strSrcFileName"; return 11; fi; # A DEAD symbolic link IS AN EXISTING FILE to this function. # But "test -e" to a dead link returns 1. # As a result, put "processSL" HERE BEFORE "test -e". if [ -L "$strSrcFileName" ]; then processSL "$strSrcFileName" "$strDesFileName"; return 0; fi; if [ ! -e "$strSrcFileName" ]; then processNE "$strSrcFileName"; return 12; fi; if [ ! -r "$strSrcFileName" ]; then processNR "$strSrcFileName"; return 13; fi; if [ -d "$strSrcFileName" ]; then processDir "$strSrcFileName" "$strDesFileName" "$strFromEncoding" "$strToEncoding"; return 0; fi; if [ -f "$strSrcFileName" ]; then processFile "$strSrcFileName" "$strDesFileName" "$strFromEncoding" "$strToEncoding"; return 0; fi; processAbnormal "$strSrcFileName"; return 14; } echo2() { local strMsg="$1"; echo "$strMsg"; echo "$strMsg">&2; } processAbnormal() { echo2 "Abnormal \\"$1\\"."; return 0; } processNE() { echo2 "! -e \\"$1\\""; read; return 0; } processLength0() { echo2 "-z \\"$1\\""; return 0; } processNR() { echo2 "! -r \\"$1\\""; return 0; } processDNX() { echo2 "DIR ! -x \\"$1\\""; return 0; } processDir() { local strSrcDirName="$1"; local strDesDirName="$2"; local strFromEncoding="$3"; local strToEncoding="$4"; if [ ! -r "$strSrcDirName" ]; then processDNX "$strSrcDirName"; return 11; fi; echo "\\"$strSrcDirName\\""; echo " Directory, accessable; from \\"$strFromEncoding\\" to \\"$strToEncoding\\"."; mkdir -p "$strDesDirName"; intRetCode=$?; if [ 0 -ne $intRetCode ]; then echo2 " Failed [mkdir -p \\"$strDesDirName\\"]."; intStatCode=11; return $intStatCode; fi; local IFS_BK=$IFS; IFS=$'\\n'; local fileNameList="$(ls -A $strSrcDirName)"; for strSubFileName in $fileNameList; do tfw_deep_demo "$strSrcDirName/$strSubFileName" "$strDesDirName/$strSubFileName" "$strFromEncoding" "$strToEncoding"; done; IFS=$IFS_BK; touchTimeStamp "$strSrcFileName" "$strDesFileName"; return 0; } processSL() { local strSrcFileName="$1"; local strDesFileName="$2"; echo "\\"$strSrcFileName\\""; echo " Symbolic link, use \\"cp -af\\""; cp -af "$strSrcFileName" "$strDesFileName"; intRetCode=$?; if [ 0 -ne $intRetCode ]; then echo2 " Failed [cp -af \\"$strSrcFileName\\" "$strDesFileName"]."; intStatCode=11; return $intStatCode; fi; # touchTimeStamp "$strSrcFileName" "$strDesFileName"; return 0; } processFile() { local strSrcFileName="$1"; local strDesFileName="$2"; local strFromEncoding="$3"; local strToEncoding="$4"; echo "\\"$strSrcFileName\\""; echo " File, readable; from \\"$strFromEncoding\\" to \\"$strToEncoding\\"."; local intStatCode=0; local intRetCode=0; # No converting to HTML file or HTML template. convertOrNot "$strSrcFileName"; intRetCode=$?; if [ 0 -ne $intRetCode ]; then echo " Not to convert \\"$strSrcFileName\\", just cp."; cp -af "$strSrcFileName" "$strDesFileName"; intStatCode=1; return $intStatCode; fi; # Test converting. iconv -f "$strFromEncoding" -t "$strToEncoding" "$strSrcFileName">"/dev/null"; intRetCode=$?; if [ 0 -ne $intRetCode ]; then echo2 " Failed testing \\"$strSrcFileName\\", iconv returns $intRetCode"; cp -af "$strSrcFileName" "$strDesFileName"; touchTimeStamp "$strSrcFileName" "$strDesFileName"; intStatCode=12; return $intStatCode; fi; # Converting. iconv -f "$strFromEncoding" -t "$strToEncoding" "$strSrcFileName">"$strDesFileName"; intRetCode=$?; if [ 0 -ne $intRetCode ]; then echo2 " Failed convetring \\"$strSrcFileName\\", iconv returns $intRetCode"; intStatCode=13; return $intStatCode; fi; touchTimeStamp "$strSrcFileName" "$strDesFileName"; return $intStatCode; } convertOrNot() { local strFileName="$1"; local strFilePostfix="${strFileName##*.}"; local strList=$(echo -e "html\\nhtm\\nmht\\nasp\\nphp\\njs\\njsp\\ndesktop"); for strOneToMatch in $strList; do if [[ $strOneToMatch == $strFilePostfix ]]; then return 1; fi; done; return 0; } touchTimeStamp() { # "touch -cr" can not handle a symbolic link. # Have to use another way. local strSrcFileName="$1"; local strDesFileName="$2"; local strTimeStampMidRst=$(stat -c %x "$strSrcFileName" | awk -F. '{print $1}' | awk '{print $1$2}' | awk -F- '{print $1$2$3}'); local strTimeStampA=$(echo "$strTimeStampMidRst" | awk -F: '{print $1$2}'); local strTimeStampB=$(echo "$strTimeStampMidRst" | awk -F: '{print $3}'); local strAtime="$strTimeStampA.$strTimeStampB"; strTimeStampMidRst=$(stat -c %y "$strSrcFileName" | awk -F. '{print $1}' | awk '{print $1$2}' | awk -F- '{print $1$2$3}'); strTimeStampA=$(echo "$strTimeStampMidRst" | awk -F: '{print $1$2}'); strTimeStampB=$(echo "$strTimeStampMidRst" | awk -F: '{print $3}'); local strMtime="$strTimeStampA.$strTimeStampB"; # "-c" to prevent creating a file for a DEAD symbolic link. touch -cmt $strMtime "$strDesFileName"; touch -cat $strAtime "$strDesFileName"; } tfw_deep_demo "$1" "$2" "$3" "$4";
试试其它关键字
批量复制
内容编码
同语言下
.
判断用户输入的是否为IP地址
.
根据web访问日志,封禁请求量异常的IP,如IP在半小时
.
iptables自动屏蔽访问网站频繁的IP
.
批量修改服务器用户密码
.
监控httpd的进程数,根据监控情况做相应处理
.
创建10个用户,并分别设置密码,密码要求10位且包含大
.
Expect实现SSH免交互执行命令
.
输入数字运行相应命令
.
用shell打印示例语句中字母数小于6的单词
.
扫描主机端口状态
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
Duncan
贡献的其它代码
(
49
)
.
设置HTTP 下载图片
.
计算一个目录的大小
.
浮云效果
.
随机生成信用卡卡号
.
重命名数据库
.
通过文件流读取一个已存在的文件
.
CLI 把16进制字符串转换成数字存到数组
.
显示中文日期
.
在标题栏上显示当前日期
.
创建一个返回上一页的按钮
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3