2012-05-04 13 views
3

我有以下腳本:光盤放入while循環目錄不起作用

#!/bin/bash 

ls -1 | while read d 
do 
    [[ -f "$d" ]] && continue 
    echo $d 
    cd $d 
done 

問題是,每個CD說「[路徑]:沒有這樣的文件或目錄」,爲什麼呢? 文件夾存在,因爲我列出它...

回答

4

我看到你的代碼的兩個問題:

  1. 你不測試目錄。
  2. 一旦你在目錄cd,你呆在那裏。

請試試這個:

#!/bin/bash 

ls -1 | while read d 
do 
    test -d "$d" || continue 
    echo $d 
    (cd $d ; echo "In ${PWD}") 
done 
+0

加上大括號做這個工作,謝謝。 –

0

問題是你改變腳本中的工作目錄。這意味着第二個cd將在您在前面的cd中輸入的子目錄中執行。

dir=`pwd` 
ls -1 | while read d 
do 
    [[ -f "$d" ]] && continue 
    cd "$dir" 
    echo $d 
    cd $d 
    #.... 
done 
+0

已經嘗試過,不工作>'沒有這樣的文件或directory' –

+0

請問您的目錄名稱包含空格(S)? –

0

不知道你想才達到的。 你想做某種遞歸的dic遍歷嗎?

這裏的豪我會做:

#!/bin/bash                                                        
CWD="$(pwd)" #save starting directory 
ls -1 | while read d 
do 
    [[ ! -d "$d" ]] && continue 
    cd "$d" 
    echo "Changed to directory" $d 
    #Now you can do someting in the sub-directory 
    cd "$CWD" #Change back to old directory 
done 
2

你不應該使用ls這樣。

#!/bin/bash 

for d in * 
do 
    [[ ! -d "$d" ]] && continue 
    echo "$d" 
    cd "$d" 
    # do something 
    cd "$OLDPWD" 
done