Linux-递归修改后缀名

3次阅读

共计 1043 个字符,预计需要花费 3 分钟才能阅读完成。

1 修改命令

需要用到:

  • find
  • awk
  • xargs

递归修改命令如下:

find . -name '*.XXX' | awk -F "." '{print $2}' | xargs -i -t mv ./{}.XXX ./{}.XXXX

XXX 后缀修改为XXXX

2 find

find用来在指定目录下查找文件,位于参数之前的字符串都被视为需要查找的目录。
find . -name '*.XXX'中:

  • .表示当前文件夹
  • -name表示文件名符合 name 的文件,有一个类似的 -iname 会忽略大小写
  • *.XXX表示寻找所有的 XXX 后缀的文件

其他常用例子:

  • 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 的普通文件并列出完整路径

3 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为后缀名

4 xargs

xargs是给命令传递参数的一个过滤器,可以将管道或者标准输入数据转换为命令行参数,默认的命令为 echo。使用xargs 可以对不支持管道的命令添加类似管道的功能,比如:

find . -name '*.jpg' | ls -l 
# 错误,但是能执行,执行的结果仅仅是 ls - l 的结果

find . -name '*.jpg' | xargs ls -l 
# 正确

xargs -i -t mv ./{}.XXX ./{}.XXXX中:

  • -i表示将 xargs 的每项名称,一般是一行一行赋值给后面的{}
  • -t可选,表示先打印需要执行的命令(这里是先打印mv)再执行
  • mv:重命名
  • {}:配合 -i 使用,这里的 {} 表示前一步 awk 中的路径名,对每一个路径都执行一次mv,也就是修改后缀名
正文完
 0