(1) shell指令积累

场景:

当前文件夹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   #这样才是正确的

 

你可能感兴趣的:(shell指令积累)