2013-01-04 47 views
0

在我編寫的腳本的一部分中,我輸出一個路徑列表到一個臨時文本文件中,以便稍後使用cd。我使用sed用'\'替換目錄名稱中的空格,這樣我也可以使腳本在dir名稱中使用空格。 cat temp.txt | sed 's/ /\\ /g' 這與替代空間的期望輸出「\」,但是當我嘗試CD後,它忽略了第二個字和說,例如\不存在:我的命令如下。任何想法如何解決這一問題?cd將無法在此路徑上工作。有任何想法嗎?

我的整個腳本是在這裏引擎收錄,如果你想看看它:http://pastebin.com/6jmnKDAd

這是從備份中我加的sed

+1

我們可以用cd看到下面的一段代碼嗎? – Danstahr

+0

從temp.txt給出樣本輸入和輸出 – hovanessyan

+0

temp.txt的輸入來自遞歸函數,該函數獲取路徑中的所有目錄和子目錄。它會在一個新行上輸出每個路徑。例如〜[換行]〜/工作等。然後我執行上面給出的sed並將其存儲在一個名爲目錄的變量中。然後我使用另一個函數與for循環遍歷所有路徑。它看起來像'for $ in目錄;做CD $了' –

回答

3

爲了補充洛倫佐的答案,如果你有一個文件一堆換行分隔的路徑名:

while IFS= read -r path; do 
    cd "$path" 
    do stuff 
done < temp.txt 

這是引用"$path",以防止外殼的word splitting

+0

我修改了我的代碼來使用這個,但'cd'仍然給我帶有空格的名稱的錯誤:/它輸出的東西沿着「/ pathHere/space測試沒有這樣的文件或目錄」,但如果我手動cd到腳本之外的給定路徑工作正常。有任何想法嗎? –

+0

也許你的文本文件有DOS行結尾,所以$ path變量以回車符結束。嘗試在你的文本文件上使用'dos2unix'。 –

+0

好吧格倫,我發現它的工作原理,如果我指定了一個絕對路徑,也就是說〜/路徑/ .....但是相對路徑似乎是不行的,例如./路徑不起作用 –

3

之前嘗試中「」封閉的可變沒有逃脫空白。

cd "$mydir" 
0

您需要的關鍵代替cat temp.txt | sed 's/ /\\ /g'

perl -F"/" -ane 'foreach (@F){if(/ /){$_="\"".$_."\"";}}print join "/",@F;' temp.txt 

還檢查here

0

是否有必要使用臨時文件,也可以存儲在目錄中的數組:

dirs=() 
dirs+=("/tmp/file A.txt") 
dirs+=("/tmp/file B.txt") 

for d in "${dirs[@]}"; do 
    cd "$d" 
done 

資源

+0

我被要求展示文件IO,所以它需要這樣做:S –

相關問題