2014-05-13 86 views
0

我剛剛開始學習bash腳本並且有一個問題,我找不到答案。我目前在一個名爲lab2的目錄中。在這個目錄中,我有另一個目錄「學生」,其中包含以每個學生的netid命名的目錄。像〜/ lab2/students/johndoe。所以學生裏面有很多目錄。我的腳本位於lab2目錄內,我需要編寫一個腳本來打印學生目錄中的目錄名稱(當然,我需要使用相對路徑)....我該怎麼做? 我嘗試了一些東西,其中之一就是輸入一個子目錄並在bash腳本中列出它的子目錄

$MYDIR="$PWD/students" 

DIRS=`ls -l . | egrep '^d' | awk '{print $8}'` 

for DIR in $DIRS  
do  
    echo ${DIR}  
done 

,但沒有奏效.... 謝謝!

+0

可能重複的[如何循環在Linux目錄?](http://stackoverflow.com/questions/2107945/how-to-loop-over-directories-in-linux)。祝你好運!) –

+0

我檢查了一個......但它不適合我,或者我不明白它......我設法通過試驗和錯誤使它工作,但我是仍然難以理解爲什麼$ PWD /學生不工作。它告訴我該目錄不存在... – doubleOK

+0

如果它不起作用,並且您確定此問題不是重複的,您應該對其進行編輯,以便區分清楚。如果你在目錄'〜/ lab2'中,沒有理由爲什麼'd for students/* /; do echo'$ d「; done'應該不起作用(我打算髮佈一個答案),但這幾乎是正是在另一個問題上發佈的內容。 –

回答

0
$MYDIR="$PWD/students" 

,但它沒有工作...

這也難怪 - 正確的語法是

MYDIR="$PWD/students" 

(無領導$)。

1

檢查以下幫助:只有

find ~/lab2/students -type d -maxdepth 1 

而如果你想要的目錄(學生名字)名稱:

find ~/lab2/students -maxdepth 1 -type d | awk -F/ '{print $NF}' 

請閱讀find man頁面,這將有很大的幫助。

awk -F/ '{print $NF}' is filtering the last field. 

而如果你想與這些目錄名稱在bash腳本的東西,你可以這樣做:

#!/bin/bash 

for file in $(find ~/lab2/students -maxdepth 1 -type d) #or you can use the awk one here 
do 

echo $file 
#your stuff here 

done 
+0

我實際上找到了一個解決方法,並「CD」編輯到腳本的頂部的學生目錄中,只需通過 cd students/ 之後,定義由smth像ls $ PWD/$ DIR工程路線... SO爲什麼它沒有在...之前工作? 基本上這裏是我現在所擁有的,除了我的最後一部分還沒有工作=))))(其中我試圖手動調用bash運行gettysburg文件... – doubleOK

+0

mmmm我想我將不得不更新後定時器允許我發佈答案......現在它不讓我發佈代碼 - 幾個字符太長,格式看起來真的很糟糕 – doubleOK

+1

如果路徑或任何文件夾,這會給出錯誤的結果包含空格,然後分別在$ file中報告路徑中的每個「單詞」。我找到的解決方法是執行'find〜/ lab2/students -maxdepth 1 -type d -print0 | while read -d $'\ 0' file'。 – uliwitness

0

擴大對@ JORD的回答,您可以使用find一些選項來獲得在輸出一些非常精細的控制:

  • -mindepth-maxdepth和控制遞歸深度(這是由默認0無窮大)。
  • -type d僅列出目錄。
  • -printf %f打印沒有前導目錄的目錄(或文件,或符號鏈接等)的名稱。

man find有更多信息,而info --raw-escapes --subnodes find | less --raw-control-chars有全部細節。

相關問題