CentOS常用命令使用本事,晦涩难懂的shell命令
分类:pc28.am神测网

linux shell——md5sum,sha1sum,sort,uniq

Shell脚本第四篇

CentOS常用命令使用技巧

Vim自动添加注释及智能换行

# vi /etc/vimrc

"``set``autoindent``set``tabstop=4``set``shiftwidth=4``map<F4>:callAddTitle()<cr>``function``AddTitle()``callsetline(1,``"#!/bin/bash"``)``callappend(1,``"#===================================================="``)``callappend(2,``"#Author:lizhenliang-EMail:[email protected]"``)``callappend(3,``"#CreateDate:"``.strftime(``"%Y-%m-%d"``))``"callappend(4,"``#Filename:".expand("%"))``callappend(4,``"#Description:"``)``callappend(5,``"#===================================================="``)``endf

1、查找并删除/data这个目录7天前创建的文件

find /data -ctime 7 -exec rm {} ;

或 find /data -ctime 7 | xargs ls -rm

#-ctime 7 七天前文件,xargs是将管道符前面结果分段传递给-ls -rm命令(-mtime是修改的文件)

2、使用tar命令备份/data目录,但不备份/data目录下的tmp目录

tar czvf data.tar.gz /data --exclude=tmp

#--exclude参数为不包含某个目录或文件,后面也可以跟多个

3、查看tar包存档文件,不解压

tar tf data.tar.gz

#t是列出存档文件目录,f是指定存档文件

4、使用stat命令查看一个文件的访问时间(Access)、修改时间(modify)、状态改变时间(Change)

stat index.php

Access: 2013-11-10 02:37:44.169014602 -0500

Modify: 2013-06-18 10:53:14.395999032 -0400

Change: 2013-06-18 10:53:38.855999002 -0400

5、解压当前目录下的所有tar存档文件到/usr/src目录

ls | xargs -I file tar zxvf file -C /usr/src/

#xargs -I file,将所有文件都通过tar zxvf命令解压

6、使用sed命令,筛除文件中的注释和空格

sed -e‘/^$/d’-e‘/^#/d’httpd.conf > http.conf

awk '/^[^#]/&&/^[^$]/' httpd.conf > http.conf

#-e:使用正则表达式,/模式/d:删除所有匹配模式的行,/^$/p:打印出所有匹配模式的行

7、筛选/etc/passwd文件中所有的用户

awk -F ":" '{print $1}' /etc/passwd

#-F指定分隔符,大括号里面是打印出第1个字段,可以打印多个字段$1 $2 $4

8、iptables实现网站跳转

iptables -A INPUT -p tcp -m multiport --dport 22,80 -j ACCEPT

echo 1 >/proc/sys/net/ipv4/ip_forward

iptables -t nat -A PREROUTING -d 10.0.0.10 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.10

iptables -t nat -A POSTROUTING -d 192.168.0.10 -p tcp --dport 80 -j SNAT --to-source 10.0.0.10

#将来自10.0.0.10的网站访问请求转发到目标服务器192.168.0.10,最后一条是源地址转发,配合目标地址转发使用
9、使用find命令exec选项,查找文件后复制到/opt目录

find /etc -name httpd.conf -exec cp -rf {} /opt/ ;

-exec执行后面命令,{}代表前面查找的文件名,;结束命令

10、查看根目录下大于1G的文件

find / -size 1024M

默认单位是b,可以使用其他单位如,C、K、M

11、查看服务器IP连接数

netstat -tun | awk '{print $5}' | cut -d: -f1 |sort | uniq -c | sort -n

netstat -tun:-tu是显示tcp和udp连接,n是以IP地址显示

awk '{print $5}':默认以空格为分隔符,打印第五段内容

cut -d:-f1:cut是一个选择性显示一行的内容命令,-d指定:为分隔符,-f1显示分隔符后的第一个字段。

uniq -c:报告或删除文中的重复行,-c在输出行前面加上出现的次数

sort -n:根据不同类型进行排序,默认排序是升序,-r参数改为降序,-n是根据数值的大小进行排序

12、插入一行到391行,包括特殊符号"/"

sed -i "391 s/^/AddType application/x-httpd-php .php .html/" httpd.conf

13、列出nginx日志访问最多的IP

awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -n 10

awk:打印第一字段

sort:进行相同记录排列在一起

uniq -c:合并重复行,并记录重复次数

sort -nr:按照数字进行降序排序

14、找出结果中的1-255之间的整数

(1)ifconfig | egrep '<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])>'

(2)grep -o '[0-9] '

15、过滤文档开头结尾加说明信息

awk ‘BEGIN{print "开头显示信息"}{print $1,$NF} END{print "结尾显示信息"}’/etc/passwd

16、通过正则来筛选出包含IP的行

ifconfig | grep "[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}"

17、网络状态查看

netstat -antp #查看所有网络连接

netstat -lntp #只查看监听的端口信息

lsof -p pid #查看进程打开的文件句柄

lsof -i:80 #查看端口被哪个进程占用

18、生产8位随机密码

echo $RANDOM |md5sum |cut -c 1-8

19、实时监控(死循环)

while [ "1" == "1" ] #条件精确等于真,也可以直接用条件true,一直为真,也就是一直循环

do

ping -c 2 www.baidu.com

done

20.查看某时间段日志

awk '$4>="[07/Sep/2014:09:19:01" && $4<="[07/Sep/2014:09:25:01"'access.log

awk '/17/Jan/2014:00/ {print $1}' access.log | sort |uniq -c | sort -nr | head -10

21.awk格式化输出

# cat test.txt

ip proto command

192.168.10.1 tcp ls

# awk '{printf "%-15s %-10s %-20sn",$1,$2,$3}' test.txt

ip proto command

192.168.10.1 tcp ls

22.整数运算保留小数点

awk BEGIN'{printf "%.1fn",'$((1024-2048))'/1024}'

23.给开头和结尾加说明信息

# awk 'BEGIN{printf " date ipn------------------n"} {print $3,$4} END{printf "------------------nend...n"}' /var/log/messages

date ip


03:13:01 localhost

10:51:45 localhost


end...

24.数字求和

# cat a.txt

10

23

53

56

方法1:

#!/bin/bash

while read num;

do

sum=`expr $sum $num`

done < a.txt

echo $sum

方法2:

cat b.txt |awk '{sum =$1}END{print sum}'

25、判断是否为数字(字符串判断也如此)

[[ $ip =~ ^[0-9] $ ]] && echo yes || echo no

[[]]比[]更加通用

^ $:从开始到结束是数字才满足条件

=~:一个操作符,表示左边是否满足右边(作为一个模式)正则表达式

26、sed替换换行符

# echo "a,b,c" |sed 's/,/n/g'

# tr -d 'n' #删除换行符

27、查看文本中20至30行内容三种方法(总共100行)

awk '{if(NR > 20 && NR < 31) print $0}' test.txt

sed -n '20,30p' test.txt

head -30 test.txt |tail

28、文本中两列位置替换

$ cat a

60.35.1.15 www.baidu.com

45.46.26.85 www.sina.com.cn

$ cat a |awk '{print $2"t"$1}'

www.baidu.com 60.35.1.15

www.sina.com.cn 45.46.26.85

Vim自动添加注释及智能换行 # vi /etc/vimrc set autoindent set tabstop=4 set shiftwidth=4 mapF4:callAddTitle()cr function AddTitle() callset...

  初学shell脚本,过程中发现许多不易于理解的脚本语言,网上各种查找学习之后,择优精简一番,做出以下总结,方便以后遗忘了回顾,也为像我一样的初学者提供方便——推荐给初学者的一本书:《Linux Shell脚本攻略》【印】Sarath Lakshman,作者是印度人,对于shell命令的总结可谓是非常详尽。

 

 

1.  重定向符号

1.文件校验

001

>               输出重定向到一个文件或设备 覆盖原来的文件
>!              输出重定向到一个文件或设备 强制覆盖原来的文件
>>             输出重定向到一个文件或设备 追加原来的文件
<               输入重定向到一个程序

  1. md5sum

# 文件校验

2.  标准错误重定向符号

eg:

002

2>             将一个标准错误输出重定向到一个文件或设备 覆盖原来的文件
2>>           将一个标准错误输出重定向到一个文件或设备 追加到原来的文件
2>&1         将一个标准错误输出重定向到标准输出 注释:1 可能就是代表 标准输出
>&             将一个标准错误输出重定向到一个文件或设备 覆盖原来的文件  c-shell
|&              将一个标准错误 管道 输送 到另一个命令作为输入

md5sum filename

md5sum filename

3.  shell中的与(&&)和或(||)

注:生成一个128位的二进制位,即32位的十六进制字符串

003

如果第一个命令执行成功,与操作符 (&&)才会执行它之后的第二个命令
如果第一个命令执行失败,或操作符 (||)才会执行它之后的第二个命令

 

 

4.  用find命令查找指定目录下文件名中含关键字“xxx”的文件(递归查找)
find /指定目录 -name '*关键字*'

1.验证文件的正确性:

004

5.  文件夹处理:
cp(复制)命令:cp -r /demo/em1 /demo/em2/em2a
注:某文件夹下的文件复制到该文件夹下的其他文件夹“  cp 文件 /该文件夹/文件夹a  ”,不需要-r,复制文件夹到电脑其他地方文件夹前要加/,系统才能识别该文件夹,否则会提示错误.
mv(移动)命令:mv /demo/em1 /demo/em2
注:将某文件夹移动到其他文件夹里,要确保同级目录下不能有与其文件夹名一样的文件夹

md5sum  file1 file2 > file_sum.md5

# 按数组排序

6.  shell中$1~$n

下一次想看一下文件是否被改动

005

指添加到shell脚本中的各参数值,$1是第1参数,意为从外面传一个参数给$1,2是第2参数

md5sum -c file_sum.md5

sort -n filename.txt

7.  echo -e和read -p

file1:ok

006

同样都有输出指定内容的功能,但read -p后输出的内容将全部显示在终端显示器上,而echo -e后则可添加其他命令,比如换行符和内容显示颜色等等

file2:ok

 

输入命令:read -p "nHello World" x

验证成功

007

输出结果:nHello World

2.验证一个目录dir下的所有文件的正确性

# 按逆序排序

输入命令:echo -e "nHello World"

find dir/ -type f -print -exec md5sum {} >file_sum.md5 ;

008

     read x

or

sort -r file.txt

输出命令:      ←此为换行符效果

find dir/ -type f -print0 | xargs -0 md5sum >> file_sum.md5

009

     Hello World

注:用print0是因为如果文件名中有空格的,不计算在内

 

8.  test ! -d $dir  

 

010

test -d $dir     意为:如果文件$dir为一个目录,则为真

这会生成一个文件:file_sum.md5

# 按月份排序

test ! -d $dir  意为:判断文件$dir不是一个目录,则为真,命令执行成功

md5sum -c file_sum.md5

011

9.  ls -R /root

若全部ok,则正确

 

递归查看路径root下的所有目录

3.校验网上下载的文件是否正确

012

10.     2> /dev/null

将下载的文件和MD5文件放在目录dir下(如果是md5字符串,可以新建一个文件为file_sum.md5)

sort -M file.txt  

将标准错误输出重定向到空设备,即不把输出内容显示到终端显示器上

cd dir 

013

11.  grep -v '^$'    过滤(删除)空白符  grep -v反转查找

md5sum -c file_sum.md5

 

       grep -v -n '^$'    过滤(删除)空行   ^代表行首  $代表行尾

若输出ok,则验证正确

014

12.  sed 's/:.*$//g'    替换文本中的:.内容    

 

# 按月份排序( 按照一月,二月,三月,这样的顺序排序 )

举例说明:如果要查找某个文档里包含关键字option的位置,如果文档中有op:tion的内容,则无法被查出来,所以要替换掉字符或者空白符

  1. sha1sum

015

sed更多命令请转至详细查看

sha1算法和md5差不多,但他生成了160位二进制数,即

 

图片 1

40位16进制数

016

图片引自,侵权请联系笔者删除

用法同md5sum

# 判断一个文件是否已经排序

13.  管线命令 |

eg sha1sum file1 file2 > file.sha1

017

[test @test bin]# last | grep root | wc -l
这个管线命令仅能处理经由前面一个指令传来的正确信息,也就是standard output ( STDOUT ) 的信息,对于 stdandard error 并没有直接处理的能力

检验:

#!bin/bash

14.  cd进不去主文件夹问题的解决办法:文件目录加单引号

sha1sum -c file.sha1

018

     cd  '/Download/localhost'

 

# filename

15.  在终端写入文本内容
cat <<EOF>log.txt
LOG FILE HEADER
This is a test log file
Function: System statistics
EOF
   在cat <<EOF>log.txt与下一个EOF行之间的所有文本行都会被当做stdin数据

 

019

16.  为读取文件创建一个文件描述符:
exec 3<input.txt  
使用文件描述符3打开并读取文件 我们可以这样使用它:
echo this is a test line > input.txt
exec 3<input.txt
现在你就可以在命令中使用文件描述符3了。例如:
cat <&3 this is a test line
如果要再次读取,我们就不能再继续使用文件描述符3了,而是需要用exec重新分配文件描述符3以便用于读取。

2.对文件中的数据进行排序,并查找唯一值

sort -C file;

17.  定义一个普通数组: array_var=(1 2 3 4 5)#这些值将会被存储在以0为起始索引的连续位置上
将数组定义成一组索引: array_var[0]="test1" array_var[0]="test2" ...
定义一个关联数组:(在关联数组中,我们可以用任意的文本作为数组索引。而在普通数组中,只能用整数作为数组索引)
先声明:declare -A ass_array
再定义:ass_array=([index1]=var1 [index2]=var2)
列出数组索引:echo ${!array_var[*]}

sort和uniq

020

18.  转义字符的特殊作用:

 

if [ $? -eq 0 ]; then

在不信任的环境下执行特权命令,通过在命令前加上 来忽略可能存在的别名设置总是一个不错的安全实践。因为攻击者可能已经利用别名将某些特权命令替换成了一些别有用心的命令,借此来盗取用户输入的重要信息。

 

021

19.  任务前后台切换:
1、command &  将任务切至后台,同时得到后台任务号和任务ID
2、执行一个任务,Ctrl z 用来挂起任务,此时可以用'bg 任务号'来将任务切至后台,用'fg 任务号'来将任务切至前台

sort可以对文件的没行按关键值进行排序,如月份-M,字典顺序-d等

     echo sored

20.  定义一个新命令,用来结合其它几个命令(举个栗子):

注意:sort和uniq对文件内容本身不改变,所以,应该重定向到别的文件中

022

                  方法一、cmd=$(ls|cat -n)
        用反引号" ` "存储命令输出—>    方法二、cmd=`ls|cat -n`

 

else

21.  括号()的特殊用法:

 

023

终端输入(命令):命令在子shell中执行时,不会影响当前shell的执行
举个栗子: pwd;(cd /bin;ls);pwd    #pwd 显示当前所在目录
扩展:可以通过子shell的方式保留空格和换行符

1.对多个文件中的内容进行排序

     echo unsored

22.  不显示输入密码

eg:

024

#!/bin/sh
#Filename: password.sh
echo -e "Enter password: "
stty -echo
read password
echo $password
#stty echo
#read password
#echo $password
其中,选项-echo禁止将输出发送到终端,而选项echo则允许发送输出。

 

fi

23.  将多行文本内容输出为一行:

$ cat > file1

025

     1、 cat example.txt(内含多行文本内容) | xargs
   用xargs还可将单行转为多行:cat example.txt | xargs -n 3 (3个字符为一行)
             2、 echo $(example.txt)

3

 

23.  xargs -d

4

026

echo "splitXsplitXsplitXsplit" | xargs -d X
split split split split
在上面的代码中,stdin是一个包含了多个X字符的字符串。我们可以用 -d将X作为输入定界符。在这里,我们明确指定X作为输入定界符,而在默认情况下,xargs采用内部字段分隔符(IFS)作为输入定界符。 同时结合-n,我们可以将输入划分成多行,而每行包含两个参数:
echo "splitXsplitXsplitXsplit" | xargs -d X -n 2
split split
split split

5

#如果要合并两个排序过的文件

24.  删除所有的.txt文件
find . -type f -name "*.txt" -print0 | xargs -0 rm -f
xargs -0将\0作为输入定界符。

e

027

25.  统计源代码目录中所有C程序文件的行数
find source_code_dir_path -type f -name "*.c" -print0 | xargs -0 wc -l

 

sort -m sorted1 sorted2

26.  删除除指定内容外的其它内容(即删除指定内容的补集)
echo you 1 me 2 xiaoshagua 6|tr -d -c '0-9n'

$ cat > file2

028

1 2 6

ge

 

27.  求给出文档中的所有数字的和:

re

029

cat sum.txt | echo [ (tr 'n' ' ' ) 0 ]

e

cat  data.txt

28.  将文件名从小写换为大写输出在终端上
ls|tr [:lower:] [:upper:]

$ sort file1 file2 > sorted.txt

030

29.  sort -k 1.3,1.3 -rk 3,3 a3.txt     

$ cat sorted.txt

1 mac    2000

按照每行的第三个字符开始排序,并结束于每行的第三个字符,同时逆序排序第三个域(即每行被空格分开的第三部分)

3

031

30.  sort a3.txt|uniq -s 2 -w 2    

4

2 winxp  4000

跳过前两个字符,并忽略第二个字符之后的内容
例:i am a good man
       i love you
输出:iam a good man    按排序顺序输出,由于跳过前两个字符,并忽略第二个字符之后的内容,所以两行内容相等,输出排序在前的

5

032

31.  查找每个字符出现的次数

e

3 bsd     1000

input="ahebhaaa"
output=`echo $input | sed 's/[^n]/ & n/g' | sed '/^$ /d' | sort | uniq -c | tr -d 'n'`
echo $output 

e

033

32.  /tmp目录下创建临时文件名:

ge

4 linux   1000

1、temp_file=$(tempfile)    2、temp_file="/tmp/file-$RANDOM"    3、temp_file="/tmp/var.$$"

re

034

33.  生成一个大小为100KB的测试文件(data.file):
dd if=/dev/zero bs=100k count=1 of=data.file
     将文件分割成多个更小的文件:
split -b 10k data.file

 

#有很多方法对这段文本排序

34.  csplit server.log /SERVER/ -n 2 -s {*} -f server -b "d.log";rm server00.log
□ /SERVER/ 用来匹配某一行,分割过程即从此处开始。
□ /[REGEX]/ 表示文本样式。包括从当前行(第一行)直到(但不包括)包含“SERVER”的匹配行。
□ {*} 表示根据匹配重复执行分割,直到文件末尾为止。可以用{整数}的形式来指定分割执行的次数。
□ -s 使命令进入静默模式,不打印其他信息。
□ -n 指定分割后的文件名后缀的数字个数,例如01、02、03等。
□ -f 指定分割后的文件名前缀(在上面的例子中,server就是前缀)。
□ -b 指定后缀格式。例如“% 02d.log”,类似于C语言中printf的参数格式。在这里文件名=前缀 后缀=server d.log。
因为分割后的第一个文件没有任何内容(匹配的单词就位于文件的第一行中),所以我们删除了server00.log。

2.对文件按列排序

035

35.  拆分形如"sample.jpg"格式的文件名和扩展名:

$ cat > data.txt

 

file_jpg="sample.jpg"

1 mac2000

036

name= {file_jpg%.*}

2 winxp4000

#执行用哪一列进行排序

extension={file_jpg#*.}  此处最好用##*.

3 bsd1000

037

%.* 得到文件名          #*. 得到扩展名

4 linux1000

 

36.  给文本内容每行末尾加一个定界符#

 

038

pass.sh
echo $*'#'
localhost@ubuntu:~/shell$ cat tess.txt | xargs -I {} ./pass.sh -p {} -I    #注意xargs -I是-I(i),不是-l(L),后面-I可以是随意的一个字母
-p tes1 -I#
-p tes2 -I#
-p tes3 -I#

1.对数据按第一组逆序

sort -nrk 1 data.txt  

后续更新,敬请期待。。。

$ sort -nrk 1 data.txt

039

 

注:n是数字排序,r是逆序,k是第几列关键字key 1表示第一列

winxp 4000

如果文章对你哪怕有一点点的帮助,麻烦点个推荐或者关注,支持一下创作者!万分感谢!

 

040

$ sort -k 2 data.txt

mac 2000

3 bsd1000

041

4 linux4000

linux 1000

1 mac2000

042

2 winxp4000

bsd 1000

 

043

3.在文件中删除重复行

 

$ cat > data.txt

044

ll

# 依据第一列,以逆序形式排序

ll

045

ss

 

ss

046

$ uniq data.txt > uniq.txt

#衣服第二列进行排序

$ cat uniq.txt

047

ll

sork -k 2 data.txt

ss

048

4.使用uniq计算字符串中重复的次数

 

$ echo 'shebhaaa' | sed 's/[^n]/&n/g' | sed sort | uniq -c | tr -d ' n'

049

3a1b1e2h

bsd 1000

 

050

3.分割文件

linux 1000

1.生成指定大小的文件

051

$ dd if=/dev/zero bs=100k count=1 of=data.file

mac 2000

注:将会生成由全零的100k文件data.file

052

2.分割文件

winxp 4000

$ split -b 20k data.file

053

xaa xab xac xad xae

 

 

054

$ split -b 20k data.file -d -a 4

# uniq  去重复字符

x0000 x0001 x0002 x0003 x0004

055

 

 

使用-d表示用数字,-a指定为4个长度

056

 

cat uniq .txt | uniq

$ split -b 20k data.file -d -a 4 hello

057

hello0000 hello0001 hello0002 hello0003 hello0004

 

3.用csplit来根据关键字分割文件

058

$ cat > server.log

cat uniq.txt | uniq -u  # 只显示未重复过的字符串

SERVER-1

059

[connection] 192.168.0.1 success

 

[connection] 192.168.0.2 failed

060

[disconnect] 192.168.0.3 pending

cat uniq.txt | uniq -c  #为了统计各行在文件中出现的次数

[connection] 192.168.0.4 success

061

SERVER-2

 

[connection] 192.168.0.1 failed

062

[connection] 192.168.0.2 failed

cat uniq.txt | uniq -d  #找出文件中重复的行

[disconnect] 192.168.0.3 success

063

[connection] 192.168.0.4 failed

 

SERVER-3

064

[connection] 192.168.0.1 pending

cat data.txt

[connection] 192.168.0.2 pending

065

[disconnect] 192.168.0.3 pending

u:01:gnu

[connection] 192.168.0.4 failed

066

 

d:04:linux

 

067

$ csplit server.log /SERVER/ -n 2 -s {*} -f server

u:01:bash

-b "d.log" ; rm server00.log

068

$ ls

u:01:back

server01.log server02.log server03.log server.log 

069

解释:

# 我们需要 01, 04 中间的字符串作为唯一的键盘,可以通过忽略前2个字符(-s 2) 并使用-w 选项(-w 2) 指定用于比较的最大字符数的方式来选定该键

首先,csplit可以根据关键字来分割文件

070

/[regex]/是一个模式匹配,匹配文件中的关键字,匹配成功后,

 

把上一次匹配或文件的开头到匹配位置之前的内容提取出来,作

071

为一个分割文件

sort data.txt | uniq -s 2 -w 2

-n 指定生成为两个数字,如01,02,03

072

-s 指定匹配多少行,{num}可指定匹配行数,*为到文件尾

 

-f 指定生成文件的前缀

073

-b 为指定后缀格式,d为两位数字

 

  实现了:filename = 前缀 后缀

074

后面执行删除是因为第一行就出现了关键字,所以是个空文件

uniq -z file.txt  # 用uniq 命令生成包含0值字节的终止字符的输出

 

075

shellmd5sum,sha1sum,sort,uniq 1.文件校验 1. md5sum eg: md5sum filename 注:生成一个128位的二进制位,即32位的十六进制字符串 1.验证文件的正确性...

 

076

uniq -z file.txt | xargs  -0 rm   # 删除所有指定的文件,如果某个文件出现多次,uniq命令只会将这个文件写入stdout一次

077

 

078

# 临时文件名

079

temp_file = "/tmp/var.$$"

080

echo $temp_file;

081

# .$$作为添加的后缀会被扩展成当前脚本的进程ID

082

 

083

# 生成临时测试文件

084

dd if=/dev/zero bs=100k count=1 of=data.file

085

 

086

#分割文件

087

split -b 10k data.file

088

 

089

#分割文件添加前缀名

090

split -b 10k data.file -d -a 4 split_file

091

 

092

#如果不想默认按照数据块还切割

093

split -l 10 data.file 

094

# 分割成多个文件,每个文件10行

095

 

096

# 提取文件扩展名必须借助%

097

file_jpg = "sample.jpg"

098

name=${file_jpg%.*}

099

echo File name Is $name;

100

# ${VAR %.*} 的含义是,删除%右侧的通配符,非贪婪模式

101

# ${VAR%%.*} 从右向左执行贪婪模式匹配

102

 

103

# 借助#操作符号,可以提取文件名中的.jpg

104

jpg=${file_jpg#.*}

105

echo $jpg

106

# ${VAR#.*} 是从$VAR中删除位于#右侧的通配符,通配符从左向右进行匹配

107

# ${VAR##*.}  贪婪模式

108

 

109

# 实现批量重命名shell脚本

110

 

111

#!/bin/bash

112

#filename rename

113

#初始化变量

114

count=1

115

#循环所有文件夹内的jpg文件

116

for img in *.jpg

117

        do

118

                # 生成新文件名

119

                new=image-$count.${img##*.}

120

               #移动文件 2> /dev/null 标准错误指向空,防止打印到终端

121

                mv "$img" "$new" 2> /dev/null

122

              # 如果通配符*.jpg 没有匹配到人和图像文件,那么shell会将通配符接是为字符串。从上面的输出可以看到不存在的.jpg文件,因此

123

              # 如果 mv *.jpg image-x.jpg 肯定会产生错误,if ( $? -eq ] 检查退出状态($?) 如果最近执行的命令没有错误,那么$?的值是0,否则

124

             #  会返回非零值,当mv命令出错时也会返回非0值,防止产生 Renameing file 为空,计数也相加

125

                if [ $? -eq 0 ];

126

                then

127

                        echo "Renameing $img to $new"

128

                        let count

129

                fi

130

done

131

 

132

将*.JPG 更名卫*.jpg

133

rename *.JPG *.jpg

134

 

135

将文件名中的空格替换为_

136

rename 's/ /_/g' *

137

# 's/ /_/g' 用于替换文件名, 而* 用于匹配文件名的通配符

138

 

139

文件名转换大小写

140

rename 'y/A-Z/a-z/' *

141

rename 'y/a-z/A-Z/ *

142

  

143

为了将mp3文件转移定的目录,可以使用

144

find path  -type f -name "*.mpe" -exec mv {} target_dir ;

145

 

146

将所有的文件名中的空格替换为字符_

147

find path -type f -exec rename '/s /_/g' {} /;

 

001 # 文件校验 002 md5sum filename 003 004 # 按数组排序 005 sort -n filename.txt 006 007 # 按逆序排序 008 sort -r file.txt 009 010 # 按月份排序...

本文由pc28.am发布于pc28.am神测网,转载请注明出处:CentOS常用命令使用本事,晦涩难懂的shell命令

上一篇:简单批量更改文件名脚本,Shell脚本攻略学习总结 下一篇:没有了
猜你喜欢
热门排行
精彩图文