场景:
当前文件夹A下有若干子文件夹a,b,c,d,...,并且每个子文件夹a,b,c,...,中又包含了一个需要删除的错误文件,假设叫hahah.txt,此时可以写一个.sh脚本文件执行。
dir=$(ls -l . |awk '/^d/ {print $NF}')
for i in $dir
do
cd $i
find . -name "hahah.txt"| xargs rm
cd ..
done
awk:按列取
awk '条件类型1 {动作 1} 条件类型2 {动作 2} ...' filename
文件类型代码:[ d ]--目录、[ - ]--文件、[ l ]--链接、[ b ]--可储存周边设备、[ c ]--序列设备。
/^d/
是一个正常的正则,用来过滤是目录(Directories
)/^-/
是一个正常的正则,用来过滤是文件(Files
)/^l/
是一个正常的正则,用来过滤是链接(Links
)
NR是指awk正在处理的记录位于文件中的位置(行号)
NF是指awk正在处理的记录包含几个域(字段),这于域分隔符有关,默认为空
cal 9 2003
September 2003 # NR=1;NF=2
Su Mo Tu We Th Fr Sa # NR=2;NF=7
1 2 3 4 5 6 # NR=3;NF=6
$1 第一列 $2 第二列 $0 整行 $ NF 最后一列 $(NF-1) 倒数第二列
xargs 命令传递参数的过滤器,组合多个指令的。详细见:https://www.runoob.com/linux/linux-comm-xargs.html
简单来说就是在管道之间传递指令,如:
find /sbin -perm +700 |ls -l #这个命令是错误的
find /sbin -perm +700 |xargs ls -l #这样才是正确的