Example 1
遍历删 *.e<一串数字>
和 *.o<一串数字>
文件,在 grep 用正则表达式筛选要删的文件[2,3] 。
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
屏蔽 ls
和 rm
在无匹配时的报错输出[9] 。rm
也可以用 -f
参数,但这用起来有点怕删错。(windows 下的屏蔽见 [10,11]) 不 启用 set -e
,因为 ls
和 rm
虽然被屏蔽输出,在无匹配时依然会报错,如果用了 set -e
就可能会因为报错中途退出。
#!/bin/bash
clean ( )
{
if [ $2 -gt 1 ] ; then
printf "| %.0s" $( seq 2 $2)
fi
if [ $2 -gt 0 ] ; then
printf "|- "
fi
echo $1 /
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 ..
rmdir $1 2 > /dev/null
}
for d in ` ls -d */ | grep log` ; do
clean ` basename $d` 0
done
References
SHELL递归遍历文件夹下所有文件 rm 使用正则表达式 删除文件 shell|rm 使用正则表达式过滤出要删除的文件 Linux Shell 只列出目录的方法 Linux shell 之 提取文件名和目录名的一些方法 Shell printf 命令 How can I repeat a character in Bash? Linux command to repeat a string n times How to “mute” ls command? Suppress command line output dos bat批量创建软链接 dos递归遍历目录删log