linux中利用shell实现批量转换文件编码linux操作系统

时间:2023-04-14 03:41:42 作者:热辣7月天 综合材料 收藏本文 下载本文

【导语】“热辣7月天”通过精心收集,向本站投稿了10篇linux中利用shell实现批量转换文件编码linux操作系统,以下是小编整理后的linux中利用shell实现批量转换文件编码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/sh

weblist=/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.txt

blog.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/bash

echo 'your are in first file'

问)在当前脚本文件中调用另外一个脚本文件?

方法一: 使用 source

脚本 second (测试示例2)

代码如下复制代码#!/bin/bash

echo '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 -e

1 * * * * sh /root/swap.sh >>/root/swap/swap.log

曾经有一段时间机器的swap不停上涨,监控后发现是一些java进程占用swap空间后,完全不释放,杀死这些java进程后,释放swap

定制AIX操作系统的shell环境网络服务器

python批量修改文件后缀示例代码

局域网中实现linux与Windows文件共享

浅析组件机制和操作系统的实现的论文

Linux批量替换某种类型文件中的字符串sed和grep命令使用

linux中crontab 计划任务linux操作系统

第 8 部分:安全 shell 及文件共享Windows系统

Android登陆界面采用文件存储实现

AutoCAD中利用区域计算实现多边形的重叠与空洞检查

Linux搜索或查找超过指定大小的文件?linux操作系统

linux中利用shell实现批量转换文件编码linux操作系统(共10篇)

欢迎下载DOC格式的linux中利用shell实现批量转换文件编码linux操作系统,但愿能给您带来参考作用!
推荐度: 推荐 推荐 推荐 推荐 推荐
点击下载文档 文档为doc格式
点击下载本文文档