我試圖通過使用 find 函式在一堆子目錄中回圈來運行特定程式,但似乎什么也沒發生。這是我的代碼:
for FILE in $(find ~/test -maxdepth 1 -type f -name '*.vcf'); do
dotnet ~/Nirvana/Nirvana.dll \
-c ~/Nirvana/Data/Cache/GRCh37/Both \
--sd ~/Nirvana/Data/SupplementaryAnnotation/GRCh37 \
-r ~/Nirvana/Data/References/Homo_sapiens.GRCh37.Nirvana.dat \
-i $FILE \
-o ~/test/annotTest/$FILE.vcf.gz
done
使用 set -x 除錯似乎指向以下行:
find /home/test -maxdepth 1 -type f -name '*.vcf'
set x
我很確定程式的引數是正確的,因為當我只在一個檔案上使用它時它們可以作業,但是回圈它什么也沒做。
我的代碼中是否有一些我沒有看到的錯誤?
謝謝!
uj5u.com熱心網友回復:
該-maxdepth 1是告訴find搜索僅在?/測驗,而不是它的子目錄。
find的深度概念可能有點令人困惑:由于您將其~/test作為搜索的起點,它認為深度為 0,直接位于其中的專案位于深度 1,而位于其中的專案(即在子目錄中) of ~/test) 位于深度 2。因此,如果您希望它在子目錄中查找內容,請使用-maxdepth 2.
(只是為了讓事情更混亂:如果你使用類似的東西find ~/test/* ...,那么 shell 會將該~/test/*部分擴展為一個檔案和目錄串列,~/test并將它們作為引數傳遞給find。因此,由于每個都被find作為一個單獨的起點,在其單獨的搜索中,每一個都將被視為深度 0。在這種情況下,子目錄中的內容將處于深度 1。)
實際上,由于您只想在單個級別進行搜索,因此我只使用 shell 通配符運算式:
for file in ~/test/*/*.vcf; do
(請注意,小寫或混合大小寫的變數名稱通常是一種很好的做法,以避免與許多具有特殊含義的全大寫名稱發生沖突。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/338731.html
上一篇:單擊按鈕時如何運行JS代碼
下一篇:在git別名中設定環境變數
