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

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

for fileName in $bins 
do 
    echo $fileName 

done 

我的目標是爲我的文件名添加一個路徑。當我不附加路徑時,我可以迭代文件夾並獲取文件名。我的挑戰是當我添加路徑回聲文件名我的正則表達式不再有效,我得到「/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

對數組符號的任何優點:'for fileName in「$ {pathToBins}」/ contigs.fa.metabat-bins- *;做echo「$ fileName」; done'?如果稍後需要數組,那麼將其保存一次會更好,但是如果信息只用了一次,則不需要將其保存在數組中。 (我同意數組應該比他們使用更頻繁,但是。) –

+0

@JonathanLeffler:我同意,如果'bin'不會被重用,那麼創建它就沒有意義了。我只是試圖保持與OP的並行,其中'bins'是故意創建的,但是作爲一個字符串而不是一個數組。我(可能錯誤地)認爲這個問題是一個片段,並且在最後的腳本中'bins'將被多次使用。 – rici

相關問題