2017-03-25 133 views
0

我想在for循環中輸入多個目錄。我沒有完整的目錄名稱,只有它的一部分。輸入名稱與子串匹配的目錄

我想這樣做,你會在終端上寫什麼,像cd *IncompleteDirName*

這是循環的MVE:IncompleteDirName的是從文件IncompleteDirNames獲得。

cont=1 
sum=1 
while read anotherFILE; do 

     IncompleteDirName=$(sed "${cont}q;d" IncompleteDirNames) 

     cd *"${IncompleteDirName}"* 
     # Do stuff 
     cd .. 
     cont=$((cont + sum)) 
done <anotherFILE 

這是行不通的,我不知道這是否與通配符不擴展或變量不能正常工作。

它扔我這個錯誤消息:

*:沒有這樣的文件或目錄

我想這意味着按預期星號無法正常工作。它沒有進入目錄,並且有一個匹配每個模式的目錄。無論如何,沒有目錄被輸入。

這是IncompleteDirNames文件看起來的樣子:

Alicante Almeria Andalucia Avila

這是名稱的列。 這些是對應於IncompleteDirName S上方的目錄名稱:

aa4fas_Alicante_com mun_Almeria comunidadde_Andalucia ciuAvila

+2

「不工作」是什麼意思?我無法準確理解這裏發生了什麼,因爲這是一個實際上並不運行*的例子。子字符串在文件中,那些子字符串是目錄名稱的一部分,並且您想在每個與「FILE」中的子字符串部分匹配的目錄中「做東西」?如果一個子字符串匹配多個目錄會怎樣?文件'code'和'p-ca'裏面有什麼? – ghoti

+0

我確定沒有多個目錄匹配。我已更正了代碼。 – D1X

+0

你需要澄清什麼是行不通的。有一件事是肯定的:如果你的不完整的名字可以匹配很多目錄,並且你想在每個目錄中做一些事情,你需要一個循環。您還需要爲沒有目錄匹配的情況做準備,在您的試驗性代碼中,這會導致「cd」命令失敗,但不會阻止執行「Do stuff」部分。 – Fred

回答

0

試試這個代碼 -

cont=1 
sum=1 
while read FILE; do 

     IncompleteDirName=$(sed "${cont}q;d" FILE) 

     cd *"${IncompleteDirName}"* 
     # Do stuff 
     cd .. 
     cont=$((cont + sum)) 
done <IncompleteDirNames 
+0

不,這不是問題,while循環另一個文件,而且必須保持那樣。 – D1X

+0

你可以檢查,如果你有像從您試圖while循環/腳本來執行的目錄「文件」文件,因爲你粘貼錯誤的詳細信息 - '*:沒有這樣的文件或directory'表明文件不適用於您所tyring循環(在你的代碼,文件名是「文件」) –

+0

是的,有,我剛纔已經檢查了它。 – D1X

0

你可以做到以下幾點:

#!/bin/bash 

while read -r line; do 
    cd /absolute/path/to/*$line* 
    # do stuff 
done < filename 

這將進入名稱部分匹配filename中的一行的每個目錄,以及「does stuff」。

相關問題