您的位置:首页 > 运维架构 > Linux

Linux 递归修改后缀名

2020-07-04 22:44 1476 查看

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`,也就是修改后缀名
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: