ls和xargs输出特定的文件扩展名

时间:2016-09-28 18:49:22

标签: ls xargs

我正在尝试使用lsxargs在路径中打印特定的文件扩展名.bam and .vcf。以下是关闭但当我|两个ls命令时,我得到以下错误。分开它工作正常,除了每个文件打印在换行符上(我的实际数据有数百个文件,使其更容易阅读)。谢谢 :)。

目录中的文件

1.bam
1.vcf
2.bam
2.vcf
带错误的

命令

ls /home/cmccabe/Desktop/NGS/test/R_folder/*.bam | xargs -n1 basename | ls /home/cmccabe/Desktop/NGS/test/R_folder/*.vcf | xargs -n1 basename >> /home/cmccabe/Desktop/NGS/test/log
xargs: basename: terminated by signal 13

所需的输出

1.bam 1.vcf
2.bam 2.vcf

2 个答案:

答案 0 :(得分:1)

您无法将输出传输到ls并将其打印到其他输出。您应该将参数提供给第一个参数,它将输出所有内容。

ls * .a * .b * .c | xargs ... q

答案 1 :(得分:0)

ls目前还没有为您做任何事情,它是列出您所有文件的shell。由于您在ls的输出处于输出状态,因此您实际上容易受到dangerous file names的攻击。<​​/ p>

basename可以使用-a选项获取多个参数:

basename -a "path/to/files/"*.{bam,vcf}

要在两列中打印,您可以printf通过xargs使用sort进行排序。整个-z-0标志会导致空字节用作文件名分隔符:

basename -az "path/to/files/"*.{bam,vcf} | sort -z | xargs -0n 2 printf "%b\t%b\n"

如果您在打印到列后再进行任何处理,则可能需要将%b格式的printf替换为%q s。这将在输出中逃避不可打印的字符,但对人眼来说可能看起来有点难看。