【导语】“热辣7月天”通过精心收集,向本站投稿了10篇linux中利用shell实现批量转换文件编码linux操作系统,以下是小编整理后的linux中利用shell实现批量转换文件编码linux操作系统,希望你喜欢,也可以帮助到您,欢迎分享!
- 目录
- 第1篇:linux中利用shell实现批量转换文件编码linux操作系统第2篇:Python批量转换文件编码格式第3篇:Python实现批量转换文件编码的方法第4篇:linux下perl,sed,shell批量替换文件内容linux操作系统第5篇:linux中利用shell监控网站状态linux操作系统第6篇:Shell中使用scp命令实现文件上传代码第7篇:linux下批量替换文件中的内容linux操作系统第8篇:linux中利用shell监控内存使用率脚本linux操作系统第9篇:linux下Shell中调用/引用/包含脚本文件方法linux操作系统第10篇:linux中利用shell脚本查看占用swap的进程linux操作系统
篇1:linux中利用shell实现批量转换文件编码linux操作系统
本例子的原理与php 中的iconv函数有点像我们利用递归再进行批量转换文件编码了,下面看例子,
原理跟简单:递归,iconv
代码如下复制代码#!/bin/sh
TGT=“source_rst”
function fe_convert {
for file in `ls $1`
do
if [ -d $1“/”$file ]
then
fe_convert $1“/”$file
else
mkdir -p `dirname $TGT“/”$1“/”$file`
iconv -f EUC-JISX0213 -t utf-8 $1“/”$file >$TGT“/”$1“/”$file
fi
done
}
fe_convert src
篇2:Python批量转换文件编码格式
需要将工作目录下的文件进行转码,开始的编码是GBK的,需要将其转换为utf-8的,文件较多,手动转换肯定不行,用Python写个脚本来实现。
自己写的方法,适用于linux,
#!/usr/bin/python#coding=utf-8import sysimport os, os.pathimport dircacheimport commandsdef add(x,y): return x*ydef trans(dirname): lis = dircache.opendir(dirname) for a in lis:af=dirname+os.sep+a## print af if os.path.isdir(af):## print aftrans(af)else: ## print af+“encoding=”+fi.name ft = commands.getoutput(‘file -i ‘+af)## print ft if a.find(‘.htm‘)==-1 and a.find(‘.xml‘)==-1 and ft.find(‘text/‘)!=-1 and ft.find(‘iso-8859‘)!=-1: print ‘gbk‘+ft+“>”+af commands.getoutput(‘iconv -ficonv -f gbk -t utf-8 -c -o‘+“”+af+“”+af)trans(os.getcwd())
py2.6以下版本可用代码
import os,sys def convert( filename, in_enc = “GBK”, out_enc=“UTF8” ): try: print “convert ” + filename, content = open(filename).read() new_content = content.decode(in_enc).encode(out_enc) open(filename, ‘w‘).write(new_content) print “ done” except: print “ error” def explore(dir): for root, dirs, files in os.walk(dir): for file in files: path = os.path.join(root, file) convert(path) def main(): for path in sys.argv[1:]: if os.path.isfile(path): convert(path) elif os.path.isdir(path): explore(path) if __name__ == “__main__”: main()
支持py3.1的版本
import osimport sysimport codecs#该程序用于将目录下的文件从指定格式转换到指定格式,默认的是GBK转到utf-8 def convert(file,in_enc=“GBK”,out_enc=“UTF-8”):try:print (“convert ” +file)f=codecs.open(file,‘r‘,in_enc)new_content=f.read()codecs.open(file,‘w‘,out_enc).write(new_content)#print (f.read())except IOError as err:print (“I/O error: {0}”.format(err))def explore(dir):for root,dirs,files in os.walk(dir):for file in files:path=os.path.join(root,file)convert(path)def main():for path in sys.argv[1:]:if(os.path.isfile(path)):convert(path)elif os.path.isdir(path):explore(path)if __name__==“__main__”:main()
以上所述就是本文 的全部内容了,希望大家能够喜欢,
篇3:Python实现批量转换文件编码的方法
作者:yak 字体:[增加 减小] 类型:转载
这里将某个目录下的所有文件从一种编码转换为另一种编码,然后保存
import osimport shutildef match(config,fullpath,type): flag=False if type == ‘exclude‘: for item in config[‘src‘][‘exclude‘]:if fullpath.startswith(config[‘src‘][‘path‘]+os.path.sep+item): flag=True break if type==‘filter‘: for item in config[‘src‘][‘filter‘]:if fullpath.endswith(item): flag=True break return flagdef conver_file(param): for root, dirs, files in os.walk(param[‘src‘][‘path‘]): for filename in files:readfile=root+os.path.sep+“%s” %filenameprint(readfile)if ‘filter‘ in param[‘src‘]: if not (match(param,readfile,‘filter‘)): continues=‘‘utfile=readfile.replace(param[‘src‘][‘path‘],param[‘dest‘][‘path‘])try : s=open(readfile,encoding=param[‘src‘][‘encoding‘]).readexcept: print(“file %s read erro” % readfile) shutil.copy(readfile,outfile)if s: #False and print(“save”) with open(outfile, mode=‘w‘, encoding=param[‘dest‘][‘encoding‘]) as a_file: a_file.write(s) for dirname in dirs:file=root+os.path.sep+“%s” %dirnameif ‘exclude‘ in param[‘src‘]: if(match(param,file,‘exclude‘)): continueutdir=file.replace(param[‘src‘][‘path‘],param[‘dest‘][‘path‘])#print(outdir)if not os.path.isdir(outdir): os.mkdir(outdir)if __name__ == “__main__”: param={‘src‘:{‘path‘:r‘D:\\work\\test\\trunk‘,‘encoding‘:‘gbk‘,‘exclude‘:[‘dataa‘],‘filter‘:[‘.php‘,‘.html‘,‘.htm‘]}, ‘dest‘:{‘path‘:“f:\\\\test\\\\new”,‘encoding‘:‘utf-8‘}} conver_file(param)
希望本文所述对大家的Python程序设计有所帮助,
篇4:linux下perl,sed,shell批量替换文件内容linux操作系统
在linux中要替换文件里面的内容我们有三种方法可用,也就是说有三个命令它们分别为perl,sed,shell了,下面我们来看演示实例,
方法1:
这两天在构建一个应用的使用用到了maven,由于project很大,足足有700多个 pom.xml文件,更郁闷的是在很多pom.xml文件里都单独指定了资源库的url,我需要把这些资源库的url统一指定到nexus本地中央库.
手 工一个个改文件配置有点不太实际,所以google了一下,找到批量替换文件内容的好方法,命令结构如下:
find -name '要查找的文件名' | xargs perl -pi -e 's|被替换的字符串|替换后的字符串|g'下面这个例子就是将当前目录及所有子目录下的所有pom.xml文件中的”www.111cn.net/phper/php.html“ 替换为”www.111cn.net“.
find -name 'pom.xml' | xargs perl -pi -e 's|www.111cn.net/phper/php.html|www.111cn.net|g'这里用到了Perl语言,
perl -pi -e 在Perl 命令中加上-e 选项,后跟一行代码,那它就会像运行一个普通的Perl 脚本那样运行该代码.
从命令行中使用Perl 能够帮助实现一些强大的、实时的转换。认真研究正则表达式,并正确地使用,将会为您省去大量的手工编辑工作。
find -name 'pom.xml' | xargs perl -pi -e 's|repo1.maven.org/maven2|localhost:8081/nexus/content/groups/public|g'
方法2:
Linux下批量替换多个文件中的字符串的简单方法。用sed命令可以批量替换多个文件中的字符串,
用sed命令可以批量替换多个文件中的 字符串。
sed -i “s/原字符串/新字符串/g” `grep 原字符串 -rl 所在目录`
例如:我要把mahuinan替换 为huinanma,执行命令:
sed -i “s/mahuinan/huinanma/g” 'grep mahuinan -rl /www'
这是目前linux最简单的批量替换字符串命令了!
具体格式如下:
sed -i “s/oldString/newString/g” `grep oldString -rl /path`
实例代码:sed -i “s/大小多少/日月水火/g” `grep 大小多少 -rl /usr/aa`
sed -i “s/大小多少/日月水火/g” `grep 大小多少 -rl ./`
方法3:
在日程的开发过程中,可能大家会遇到将某个变量名修改 为另一个变量名的情况,如果这个变量是一个局部变量的话,vi足以胜任,但是如果是某个全局变量的话,并且在很多文件中进行了使用,这个时候使用vi就是 一个不明智的选择。这里给出一个简单的shell命令,可以一次性将所有文件中的指定字符串进行修改:
grep “abc” * -R | awk -F: '{print $1}' | sort | uniq | xargs sed -i 's/abc/abcde/g'
补充说明:
sed -i “s/oldString/newString/g” `grep oldString -rl /path`
对多个文件的处理可能不支持,需要用 xargs, 搞定。
变种如下:
grep oldString -rl /path | xargs sed -i “s/oldString/newString/g”
注意:
在 `grep oldString -rl /path` 中 ` 为1前边的翻引号`,而不是enter 前的 '
篇5:linux中利用shell监控网站状态linux操作系统
我们现在网站都会使用一些工具监控网站服务器是否可以访问,但不能监控网站的状态,下面我来给大家推荐一个linux中利用shell监控网站状态脚本,
今天给自己的网站写了shell监控,避免网站挂了我都不知道,这个脚本是分别检查网页状态和网页连接时间,还可以根据自己的需要进行扩展,很强大.
脚本内容:
vi check-web.sh
代码如下复制代码#!/bin/shweblist=/root/weblist.txt
for list in `cat $weblist|grep -E -v “#|^$”`
do
httpcode=`curl -o /dev/null -s -w %{http_code} “$list”`
httptime=`curl -o /dev/null -s -w “time_connect: %{time_connect}ntime_starttransfer:%{time_starttransfer}ntime_total: %{time_total}n” “$list”|grep time_total|awk -F “:” '{print $2*1000}'`
#if [ $httpcode = 200 ]||[ $httpcode = 301 ]||[ $httpcode = 302 ]||[ $httpcode = 403 ]||[ $httpcode = 401 ]
if [ $httpcode = 200 ]||[ $httpcode = 301 ]||[ $httpcode = 302 ]
then
echo “$list is checked ok!”
else
echo “$list is down!” | mutt -s “web is down” rocdk@163.com
fi
if [ $httptime -ge 10000 ]
then
echo “$list is timeout!” | mutt -s “web is timeout” rocdk@163.com
else
echo “$list is connect ok!”
fi
done
然后创建要检查网站的列表,格式为xxx.xxx.xxx
代码如下复制代码touch /root/weblist.txtblog.slogra.com
chmod +x /root/soft_shell/check-web.sh
crontab -e
*/3 * * * * /bin/sh /root/soft_shell/check-web.sh
手动运行后的图如下
好了,这下可以放心了.
篇6:Shell中使用scp命令实现文件上传代码
这篇文章主要介绍了Shell中使用scp命令实现文件上传代码,本文讲解使用scp命令实现名登录上传文件,需要的朋友可以参考下
自从法现 SSH 可以执行远端命令后,ftp 软件也渐渐很少用了,
每次更新服务器代码,都要打包、上传、登录到服务器修改文件权限、更新 Cache 等等,又慢又容易出错,所以做成脚本,一次帮我搞定,自己就点上一根烟坐在电脑面前发呆,要么就玩会儿《植物大战僵尸》啥的,悠闲!
PS: Ant 以及 Phing 用户,你们可以无视了… 我只是喜欢玩 Shell 而已。
代码如下:
#!/bin/sh
HOME=‘/cygdrive/d/public_html/myproject‘
## 先打包本地代码
## 排除如下文件: *.svn, *.bat, upload.sh, cache
## 如果需要 exclude 的文件很多,可以使用参数 --exclude-from=FILE
## 将文件一行行写入 FILE 中
cd $HOME
tar jcf tmp.tar.bz2 * \\
--exclude=*.bat \\
--exclude=*.bz2 \\
--exclude=*.gz \\
--exclude=.svn \\
--exclude=cache \\
--exclude=upload.sh \\
## 通过 SCP 上传文件
scp tmp.tar.bz2 user@your.host.com:/home/public_html/myproject/tmp.tar.bz2
## 执行远程 ssh 命令
## 这里执行了另外一个脚本 load.sh
ssh user@your.host.com
“
cd /home/public_html/myproject
tar jxf tmp.tar.bz2
chown -R web:web *
chmod -R 755 *
sh load.sh
rm -f tmp.tar.bz2
”
## 删除本地文件
rm -f tmp.tar.bz2
echo “Everything is done.”
# 星期一 一月 11, 2010 by Verdana
# vim: set expandtab tabstop=4 shiftwidth=4:
SSH 我配置成了自动登录,可以参考这里,
篇7:linux下批量替换文件中的内容linux操作系统
对于单个文件,使用sed命令很容易做到,如果需要替换某个指定文件夹下所有文件,借助grep和sed组合成一条命令也可以轻松搞定。
grep命令可以查找单个文件或文件夹下文件中的内容,使用参数“r”或“-R”可以递归查找指定文件夹下的所有文件;参数“l”可以让grep输出包含指定字符串的文件名,首次匹配成功后立刻停止对同文件的查询。如果不使用“l“,grep查询单个文件时输出文件中所有包含指定字符串的行,对文件夹查询时则按照“文件名:包含字符串行”的方式输出。
有了上面提到的知识,执行批量替换的命令可以写为:
grep “netingcn” -rl /assign-path | xargs sed -i 's/netingcn/www.netingcn/g'
或
sed -i 's/netingcn/www.netingcn/g' `grep “netingcn” -rl /assign-path`
还有一种比较复杂的写法:
grep “netingcn” * -R | awk -F: '{print $1}' | sort | uniq | xargs sed -i 's/netingcn/www.netingcn/g'
其中命令awk用于分割字符串、uniq对结果进行除重,
、网络上现成的资料
格式: sed -i “s/查找字段/替换字段/g” `grep 查找字段 -rl 路径`
linux sed 批量替换多个文件中的字符串
sed -i “s/oldstring/newstring/g” `grep oldstring -rl yourdir`
例如:替换/home下所有文件中的www.111cn.net为111cn.net
sed -i “s/www.111cn.net/111cn.net/g” `grep www.111cn.net -rl /home`
exp:sed -i “s/shabi/$/g” `grep shabi -rl ./`
2、自己额外附加
2.1 将文件1.txt内的文字“garden”替换成“mirGarden”
# sed -i “s/garden/mirGarden/g” 1.txt //sed -i 很简单
2.2 将当前目录下的所有文件内的“garden”替换成“mirGarden”
## sed -i “s/garden/mirGarden/g” `ls` //其实也就是ls出多个文件名而已
篇8:linux中利用shell监控内存使用率脚本linux操作系统
一台服务器如果内存使用过多可能导致网站打开很慢,下面我分享一下在linux中利用shell命令实现实时监控你服务器内存使用状态并给提醒
为了更方便的知道服务器上内存使用情况,并根据内存使用大小来重启服务,这里我只整了故障报警,如果想要自动重启服务的话,就要大家自己去修改了.
脚本内容:
写出来了,不太好看, 也不太会用awk, 不太会用awk的格式输出所以用了一长串的字符,高手们来改进
代码如下复制代码[zz ~/my_scripts]$ cat awk_monitor
{
FS=“t”
if ( $9 >= 5.0 )
if ( $10 >=3.0 )
print $1, $2, $3, $4, $5,$6,$7,$8,$9, $10, $11, $12 #这里我觉得可以改进
fi
}
[zz ~/my_scripts]$ cat monitor_processes
#!/bin/bash
top -b -n 1 |sed -n '8,$'p >top.log
print “Please notice CPU and memory usage:n” >>top_re.log
echo >>top_re.log
print “PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND” >>top_re.log # 这里我也觉得可以改进
gawk -f awk_monitor < top.log >>top_re.log
mail -s “system monitor” zl@shili001 < top_re.log
后来网上找到一个不错的代码给大家分享一下,
linux中利用shell监控内存使用率脚本linux操作系统
,
vi check_mem.sh
代码如下复制代码#!/bin/bash
IP=`ifconfig | grep 'inet ' | grep -v '127.0.0.1' | awk -F ' ' '{print $2}'| awk -F':' '{print $2}'| head -n 1`
MAX_mem=95
MAX_swap=20
memory=`free -m|grep Mem|awk '{print $3}'`
Men=`free | awk '/Mem/ {print int($3/$2*100)}'`
Mem=`free -m | awk '/-/ {print $3}'`
SWAP=`free | awk '/Swap/ {print int($3/$2*100)}'`
if [ $Men -gt $MAX_mem -o $SWAP -gt $MAX_swap ];then
echo “Men Warning,memory: $memory ,Mem: $Mem” | mutt -s “$IP Men Warning ” rocdk@163.com
fi
保存后加到crontab里
代码如下复制代码chmod +x /root/soft_shell/check_mem.sh
*/3 * * * * /bin/sh /root/soft_shell/check_mem.sh
篇9:linux下Shell中调用/引用/包含脚本文件方法linux操作系统
我以前只知道在php中调用其它的php文件,今天看一shell命令也可以直接调用脚本了,下面我整理一下我参考的例子给各位同学分享,
脚本 first (测试示例1)
代码如下复制代码#!/bin/bashecho 'your are in first file'
问)在当前脚本文件中调用另外一个脚本文件?
方法一: 使用 source
脚本 second (测试示例2)
代码如下复制代码#!/bin/bashecho 'your are in second file'
source first
方法二: 使用 .
代码如下复制代码脚本 second (测试示例3)#!/bin/bash
echo 'your are in second file'
. first
source filename和 . filename 应该是同一回事,都是在*当前*Shell环境中执行脚本。也可以使用sh filename,那是在当前Shell的子Shell中执行脚本。
可以通过下面这两个脚本来体会三种调用方式的不同:
代码如下复制代码1.sh
#!/bin/bash
A=B
echo “PID for 1.sh before exec/source/fork:$$”
export A
echo “1.sh: $A is $A”
case $1 in
exec)
echo “using exec…”
exec ./2.sh ;;
source)
echo “using source…”
. ./2.sh ;;
*)
echo “using fork by default…”
./2.sh ;;
esac
echo “PID for 1.sh after exec/source/fork:$$”
echo “1.sh: $A is $A”
2.sh
#!/bin/bash
echo “PID for 2.sh: $$”
echo “2.sh get $A=$A from 1.sh”
A=C
export A
echo “2.sh: $A is $A”
执行情况:
$ ./1.sh
PID for 1.sh before exec/source/fork:5845364
1.sh: $A is B
using fork by default…
PID for 2.sh: 5242940
2.sh get $A=B from 1.sh
2.sh: $A is C
PID for 1.sh after exec/source/fork:5845364
1.sh: $A is B
$ ./1.sh exec
PID for 1.sh before exec/source/fork:5562668
1.sh: $A is B
using exec…
PID for 2.sh: 5562668
2.sh get $A=B from 1.sh
2.sh: $A is C
$ ./1.sh source
PID for 1.sh before exec/source/fork:5156894
1.sh: $A is B
using source…
PID for 2.sh: 5156894
2.sh get $A=B from 1.sh
2.sh: $A is C
PID for 1.sh after exec/source/fork:5156894
1.sh: $A is C
$
篇10:linux中利用shell脚本查看占用swap的进程linux操作系统
下面我们一起来看看关于linux中利用shell脚本查看占用swap的进程,希望此文章对各位同学会带来帮助,
查看进程在占用swap分区的脚本
命令脚本如下:
代码如下复制代码for i in `cd /proc;ls |grep “^[0-9]”|awk ' $0 >100'` ;do awk '/Swap:/{a=a+$2}END{print '“$i”',a/1024“M”}' /proc/$i/smaps ;done |sort -k2nr
查看占用swap的进程
代码如下复制代码#!/bin/bash
echo -e `date +%y%m%d%H%M`
echo -e “PIDttSwapttProc_Name”
# 拿出/proc目录下所有以数字为名的目录(进程名是数字才是进程,其他如sys,net等存放的是其他信息)
for pid in `ls -l /proc | grep ^d | awk '{ print $9 }'| grep -v [^0-9]`
do
# 让进程释放swap的方法只有一个:就是重启该进程。或者等其自动释放。放
# 如果进程会自动释放,那么我们就不会写脚本来找他了,找他都是因为他没有自动释放。
# 所以我们要列出占用swap并需要重启的进程,但是init这个进程是系统里所有进程的祖先进程
# 重启init进程意味着重启系统,这是万万不可以的,所以就不必检测他了,以免对系统造成影响。
if [ $pid -eq 1 ];then continue;fi
grep -q “Swap” /proc/$pid/smaps 2>/dev/null
if [ $? -eq 0 ];then
swap=$(grep Swap /proc/$pid/smaps
| gawk '{ sum+=$2;} END{ print sum }')
proc_name=$(ps aux | grep -w “$pid” | grep -v grep
| awk '{ for(i=11;i<=NF;i++){ printf(“%s ”,$i); }}')
if [ $swap -gt 0 ];then
echo -e “${pid}t${swap}t${proc_name}”
fi
fi
done | sort -k2 -n | awk -F't' '{
pid[NR]=$1;
size[NR]=$2;
name[NR]=$3;
}
END{
for(id=1;id<=length(pid);id++)
{
if(size[id]<1024)
printf(“%-10st%15sKBt%sn”,pid[id],size[id],name[id]);
else if(size[id]<1048576)
printf(“%-10st%15.2fMBt%sn”,pid[id],size[id]/1024,name[id]);
else
printf(“%-10st%15.2fGBt%sn”,pid[id],size[id]/1048576,name[id]);
}
}'
建议做定时任务监控swap空间使用情况
代码如下复制代码corntab -e1 * * * * sh /root/swap.sh >>/root/swap/swap.log
曾经有一段时间机器的swap不停上涨,监控后发现是一些java进程占用swap空间后,完全不释放,杀死这些java进程后,释放swap
★ Linux批量替换某种类型文件中的字符串sed和grep命令使用
★ 第 8 部分:安全 shell 及文件共享Windows系统
★ Linux搜索或查找超过指定大小的文件?linux操作系统
linux中利用shell实现批量转换文件编码linux操作系统(共10篇)




