2016-06-21 4 views
0
pathToBins=$1 

bins="${pathToBins}contigs.fa.metabat-bins-*" 

for fileName in $bins 
do 
    echo $fileName 

done 

私の目標は、ファイル名にパスを付けることです。パスを添付しないと、フォルダを繰り返し処理してファイル名を取得できます。私の挑戦は、パスのエコーfileNameを追加すると私の正規表現はもはや動作しなくなり、私は "/home/erikrasmussen/Desktop/Scr​​ipt/realLargeMetaBatBinscontigs.fa.metabat-bins-*"という正規表現 '*'が文字列。どのようにファイルのフォルダを反復処理中にパスとフルファイル名を取得できますか?Bashで指定したパスでディレクトリを繰り返し処理する

答えて

1

私は本当にあなたのファイルがハードドライブ上に配置されている方法を知りませんが、"/home/erikrasmussen/Desktop/Script/realLargeMetaBatBinscontigs.fa.metabat-bins-*"でカジュアルな一見はそれがcontigs/が欠落していることを示唆しています。その場合は、その後、あなたがビンのあなたの定義を変更する必要があります。しかし

bins="${pathToBins}/contigs.fa.metabat-bins-*" 

、それは代わりに空白やメタ文字を含まないように、ファイル名に頼るのではbashの配列を使用してはるかに堅牢です。だから私はお勧めします:

bins=(${pathToBins}/contigs.fa.metabat-bins-*) 
for fileName in "${bins[@]}" 
do 
    echo "$fileName" 
done 

バッシュは、通常、その場合にはあなたがオリジナルのパターンが表示されますので、任意のファイルと一致しないパターンを展開しません。上記の配列形式を使用する場合は、bashオプションnullglobを設定すると、不一致パターンが消えて空の配列が残ってしまいます。

+0

"$ {pathToBins}"/contigs.fa.metabat-bins- *;のファイル名に対する配列表記の利点。 echo "$ fileName";を実行します。済んだ?後で配列が必要な場合は、一度保存する方が良いですが、情報が一度使用される場合は、配列に保存する必要は特にありません。 (私は配列がもっと頻繁に使われるべきだと思っています。) –

+0

@JonathanLeffler:私は、 'bins'が再利用されないなら、それを作ることに意味がないと思います。私はちょうどビンズが意図的に作られているが、配列ではなく文字列として、OPと並行して維持しようとしていました。私は(おそらく間違って)その質問はスニペットであり、最終的なスクリプトでは 'bins'が2回以上使用されると想定していました。 – rici

関連する問題