【问题标题】:ls and xargs to output specific file extentionsls 和 xargs 输出特定的文件扩展名
【发布时间】:2017-02-06 21:40:39
【问题描述】:

我正在尝试使用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

【问题讨论】:

  • 只需将参数提供给第一个 ls。您不能随意使用管道命令。 ls *.a *.b *.c ...
  • @SamiKuhmonen 如果你回答我会接受...谢谢:)

标签: ls xargs


【解决方案1】:

ls 目前并没有真正为您做任何事情,它是列出您所有文件的 shell。由于您正在传递ls 的输出,因此您实际上很容易受到dangerous file names 的攻击。

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"

如果您要在打印到列后进行更多处理,您可能需要将printf 格式中的%bs 替换为%qs。这将在输出中转义不可打印的字符,但在人眼看来可能有点难看。

【讨论】:

    【解决方案2】:

    您不能将输出通过管道传输到ls 并让它与其他输出一起打印。您应该将参数提供给第一个参数,它将输出所有内容。

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

    【讨论】:

      猜你喜欢
      • 2010-11-29
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 1970-01-01
      • 2014-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多