ls 和 xargs 输出特定的文件扩展名
ls and xargs to output specific file extentions
我正在尝试使用 ls
和 xargs
打印特定的文件扩展名 .bam and .vcf
witout the path。下面是关闭的但是当我 |
两个 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 | xargs ...q
ls
目前并没有真正为您做任何事情,shell 列出了您的所有文件。由于您在传输 ls
的输出,因此您实际上容易受到 dangerous file names.
的攻击
basename
可以使用 -a
选项接受多个参数:
basename -a "path/to/files/"*.{bam,vcf}
要在两列中打印,您可以通过 xargs
使用 printf
,使用 sort
进行...排序。 -z
或 -0
标志导致空字节被用作文件名分隔符:
basename -az "path/to/files/"*.{bam,vcf} | sort -z | xargs -0n 2 printf "%b\t%b\n"
如果您打算在打印到列后进行更多处理,您可能需要将 printf
格式中的 %b
替换为 %q
。这将转义输出中的不可打印字符,但在人眼中可能看起来有点难看。
我正在尝试使用 ls
和 xargs
打印特定的文件扩展名 .bam and .vcf
witout the path。下面是关闭的但是当我 |
两个 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 | xargs ...q
ls
目前并没有真正为您做任何事情,shell 列出了您的所有文件。由于您在传输 ls
的输出,因此您实际上容易受到 dangerous file names.
basename
可以使用 -a
选项接受多个参数:
basename -a "path/to/files/"*.{bam,vcf}
要在两列中打印,您可以通过 xargs
使用 printf
,使用 sort
进行...排序。 -z
或 -0
标志导致空字节被用作文件名分隔符:
basename -az "path/to/files/"*.{bam,vcf} | sort -z | xargs -0n 2 printf "%b\t%b\n"
如果您打算在打印到列后进行更多处理,您可能需要将 printf
格式中的 %b
替换为 %q
。这将转义输出中的不可打印字符,但在人眼中可能看起来有点难看。