shell递归遍历目录删log

Example 1

  • 遍历删 *.e<一串数字>*.o<一串数字> 文件,在 grep 用正则表达式筛选要删的文件[2,3]
#!bin/bash

clean()
{
    echo "->" cleaning: $1
    ls -d $1/* | grep -E "*.[oe][0-9]+" | xargs rm
    for f in `ls -a $1`; do
        if [ -d $1/$f ]; then
            if [[ $f != '.' && $f != '..' ]]; then
                clean $1/$f
            fi
        fi
    done
}

clean $(pwd)

Example 2

  • 递归删 events.out.tfevents.**.pth,同时打印遍历的目录结构(用 printf 格式化输出)。
  • 2>/dev/null 屏蔽 lsrm 在无匹配时的报错输出[9]rm 也可以用 -f 参数,但这用起来有点怕删错。(windows 下的屏蔽见 [10,11])
  • 启用 set -e,因为 lsrm 虽然被屏蔽输出,在无匹配时依然会报错,如果用了 set -e 就可能会因为报错中途退出。
#!/bin/bash

# set -e  # 关掉,否则会因 ls、rm 在无匹配时的报错而退出

clean()
{
    # print directory tree
    if [ $2 -gt 1 ]; then
        printf "|  %.0s" $(seq 2 $2)
    fi
    if [ $2 -gt 0 ]; then
        printf "|- "
    fi
    echo $1/

    # clean log
    cd $1
    rm events.out.tfevents.* 2>/dev/null
    rm *.pth 2>/dev/null
    for d in `ls -d */ 2>/dev/null`; do
        clean `basename $d` `expr $2 + 1`
    done
    cd ..

    # remove folder if it's empty
    rmdir $1 2>/dev/null
}

for d in `ls -d */ | grep log`; do
    clean `basename $d` 0
done

References

  1. SHELL递归遍历文件夹下所有文件
  2. rm 使用正则表达式 删除文件
  3. shell|rm 使用正则表达式过滤出要删除的文件
  4. Linux Shell 只列出目录的方法
  5. Linux shell 之 提取文件名和目录名的一些方法
  6. Shell printf 命令
  7. How can I repeat a character in Bash?
  8. Linux command to repeat a string n times
  9. How to “mute” ls command?
  10. Suppress command line output
  11. dos bat批量创建软链接
  12. dos递归遍历目录删log
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值