2011-10-10 90 views
1

我想列出當前目錄中的所有目錄ls -d *並列出其所有完整路徑。我知道我需要將輸出傳遞給某個東西,但只是不確定是什麼。我不知道我是否可以將輸出輸出到pwd之類的東西。管道ls輸出以獲取所有目錄的路徑

想要的結果如下。

$ cd /home/ 
$ ls -d *|<unknown> 
/home/Directory 1 
/home/Directory 2 
/home/Directory 3 

<unknown>是一個需要管pwd什麼的一部分。

我的總體目標是創建一個腳本,它允許我爲每個提供給它的完整路徑構造一個命令。我將鍵入build,並在內部爲每個命令運行以下命令。

cd <full directory path>; JAVA_HOME=jdk/Contents/Home "/maven/bin/mvn" clean install 

回答

3

嘗試簡單:

$ ls -d $PWD/*/ 

或者

$ ls -d /your/path/*/ 
+0

這完美的作品!我有一個後續問題。現在我可以將'ls -d $ PWD/* /'放入我的bash腳本中,我怎麼能夠遍歷每個腳本來運行提到的命令,它執行更改目錄,設置'JAVA_HOME'參數,然後運行'clean install'? –

+0

如果你的目錄中沒有空格,一個簡單的for循環應該做。 – Mat

+0

你也可以循環使用其中有空格的目錄,只是不要使用無用的Ls; http://partmaps.org/era/unix/award.html#ls。相反,請在$ PWD/* /中輸入「d」。做任何「$ d」; done'。雙引號很重要!總是引用你的變量插值。 – tripleee

0
ls -d $PWD/* | xargs -I{} echo 'cd {} JAVA_HOME=jdk/Contents/Home "/maven/bin/mvn" clean install' >> /foo/bar/buildscript.sh 

會生成腳本妳。

0

也許我還建議您使用--ls構造中,使ls -d $PWD/*/成爲ls -d -- $PWD/*/(插入額外--)?這將與實例幫助其中一個目錄或文件名與-字符開始:

/home/-dir_with_leading_hyphen/ 
/home/normal_dir/ 

在這種情況下,ls -d */結果:

ls: illegal option -- - 
usage: ls [-ABCFGHLOPRSTUWabcdefghiklmnopqrstuwx1] [file ...] 

然而,ls -d -- */將導致:

-dir_with_leading_hyphen/  normal_dir/ 

然後,當然,您可以使用上述腳本(只要您包含-- a您可以撥打ls)。

1
find `pwd` -type d -maxdepth 1 -name [^.]\*

注意:上述命令在bash或sh中工作,而不在csh中。 (Bash是Linux和MacOSX的默認外殼。)

+0

如果您切換'-maxdepth 1'和'-type d',則會擺脫警告。名稱選項和sed命令的用途是什麼? –

+0

名稱選項的參數是一個表示「忽略隱藏文件」的正則表達式。現在我不再需要刪除sed部分(pwd前綴避免從查找輸出中刪除「./」)。 – mda

+0

您不需要屏蔽組中的點。作爲小丑的小點在小組中沒有意義。因此,在一個小組中,它不能像小丑一樣工作。然而 - 名稱參數使用globbing,而不是正則表達式,所以它不像百搭小玩家那樣工作。 ?是globbing的小丑。 –

0

無管道neccessary:

find $(pwd) -maxdepth 1 -type d -printf "%H/%f\n" 

出乎我的意料,在打印語句命令的工作太:

find -maxdepth 1 -type d -printf "$(pwd)/%f\n"