ls *.fq.gz | while read f; do b="${f%.fq.gz}.bam"; if [ ! -f "$b" ]; then echo "$f"; fi; done
1.ls *.fq.gz:
列出当前目录下所有以.fq.gz结尾的文件
2.|:
管道符号,将前一个命令的输出作为后一个命令的输入
3.while read f; do:
while循环,逐行读取前面ls命令的输出
每一行(即每个文件名)被存储在变量f中
4.b="${f%.fq.gz}.bam":
对于每个.fq.gz文件,构造对应的.bam文件名
${f%.fq.gz} 是字符串操作,意思是从f变量值中删除末尾的.fq.gz
然后加上.bam后缀,得到对应的bam文件名
5.if [ ! -f "$b" ]:
检查构造的bam文件是否存在
-f 测试文件是否存在
! 表示取反,所以 ! -f 意思是"文件不存在"
6.then echo "$f":
如果bam文件不存在,则输出原始的fq.gz文件名