须要用到:bash
find
awk
xargs
递归修改命令以下:工具
find . -name '*.XXX' | awk -F "." '{print $2}' | xargs -i -t mv ./{}.XXX ./{}.XXXX
复制代码
把XXX
后缀修改成XXXX
。spa
find
find
用来在指定目录下查找文件,位于参数以前的字符串都被视为须要查找的目录。 find . -name '*.XXX'
中:命令行
.
表示当前文件夹-name
表示文件名符合name
的文件,有一个相似的-iname
会忽略大小写*.XXX
表示寻找全部的XXX
后缀的文件其余经常使用例子:code
find . -type f
:递归列出通常文件find . -ctime -20
:递归列出最近20天内更新过的文件find /var/log -type f -mtime +7 -ok rm {} \;
:查找/var/log
下更新时间在7日之前的普通文件,并在删除以前询问find . -type f -perm 644 -exec ls -l {} \;
:查找当前目录下权限为644
的文件find / -type f -size 0 -exec ls -l {} \;
:查找/
下文件大小为0的普通文件并列出完整路径awk
awk
是一种处理文本文件的语言,是一个强大的分析工具。 awk -F "." '{print $2}'
中:递归
-F
指定输入文件拆分分隔符,由于须要修改后缀名,后缀名与主文件名由.
分隔,所以后面加上"."
参数'{print $2}'
:print
表示打印,$
在awk中表示字段引用,这里$2
表示引用第二个字段,字段根据前面的-F
参数进行分隔。find
打印出来的是./a/b/c.XXX
,所以print $2
会打印其中第二个字段,就是路径/a/b/c
,而print $1
为空(由于第一个.
以前没有其余内容),print $3
为后缀名xargs
xargs
是给命令传递参数的一个过滤器,能够将管道或者标准输入数据转换为命令行参数,默认的命令为echo
。使用xargs
能够对不支持管道的命令添加相似管道的功能,好比:字符串
find . -name '*.jpg' | ls -l
# 错误,可是能执行,执行的结果仅仅是ls -l的结果
find . -name '*.jpg' | xargs ls -l
# 正确
复制代码
xargs -i -t mv ./{}.XXX ./{}.XXXX
中:string
-i
表示将xargs
的每项名称,通常是一行一行赋值给后面的{}
-t
可选,表示先打印须要执行的命令(这里是先打印mv
)再执行mv
:重命名{}
:配合-i
使用,这里的{}
表示前一步awk
中的路径名,对每个路径都执行一次mv
,也就是修改后缀名