2016-09-28 3 views
0

のパスを除いて、lsxargsを使用して特定のファイル拡張子を印刷しようとしています。以下は近いですが、|の2つのlsコマンドの場合、私は以下のエラーを受け取ります。分割されたファイルは、各ファイルが改行で印刷されることを除いて正常に動作します(私の実際のデータには数百のファイルがあり、読みやすくなります)。ありがとうございました :)。lsとxargsを指定して特定のファイルの拡張子を出力する

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 
+1

最初のlsに引数を与えます。あなたは好きなだけコマンドをパイプすることはできません。 ls * .a * .b * .c ... –

+0

@SamKuhmonenもしあなたがそれを答えるなら、それを受け入れるでしょう...ありがとう。 – Chris

答えて

1

出力をlsにパイプすることはできず、それを他の出力と共に出力させることができます。最初のパラメータにパラメータを渡すと、すべてが出力されます。

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

+0

もう一度ありがとう。 – Chris

0

ls現在あなたのために何もしていないのは、すべてのファイルをリストしているシェルです。 lsの出力をパイプしているので、実際にはdangerous file namesの脆弱性があります。 2列に、あなたがのために...ソートsortで、xargs経由printfを使用することができることを印刷するには

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

basename-aオプションで複数の引数を取ることができます。原因はnullバイトを通して-zまたは-0フラグは、ファイル名のセパレータとして使用する:

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

あなたが列に印刷した後、任意のより多くの処理をやってするつもりなら、あなたが%b Sを交換することがありprintfフォーマットは%qです。出力では印刷できない文字をエスケープしますが、人間の目にはちょっと醜いかもしれません。

関連する問題