2012-06-27 56 views
2

我想獲得一個目錄中的非目錄文件的列表。 find命令正在運行,但maxdepth 1選項無效,可能是因爲它在Aix上不受支持。如何獲取Aix或Unix目錄中的非目錄文件列表?

此命令:

find . -maxdepth 1 -type f 

回報:

find: bad option -maxdepth 

我用這個命令:

ls -l | grep ^- | awk '{print $9}' 

但如果文件名包含空格,這是行不通的。有什麼辦法可以解決這個問題嗎?

回答

1

去了你的最後一次嘗試,這似乎好工作:

ls -l | grep ^- | awk '{for(i=1;i<9;i++) $i="";print}' | sed 's/^  //' 

有可能是一個更好的辦法(!我挺希望有),但這樣會合攏前八場,剩下八個空格和那麼該行的其餘部分(因此文件名中的空格可以),然後刪除那些前導八個空格。

我寧願削減到追逐這個bash的版本:

for f in *; do if [ -f "$f" ]; then echo "$f"; fi; done 

我敢肯定,你也可以自行調整使ksh(這我不熟悉)。

我仍然希望別人知道更直接的事情。

+0

這兩種解決方案在ksh的工作,但如果我給在文件名稱的多個連續的空格,這是行不通的;例如,如果文件名是「ABC(4位)d.txt」,那麼它是顯示結果爲'abc d.txt' – user1484782

+0

如果我把$放在$ f的echo $ f中,代碼的工作原理如下: for f in *;如果[-f「$ f」];然後回顯「$ f」;網絡連接;完成謝謝Darshan,我對這個for循環版本確定,但爲了知識的緣故,如果我必須做同樣的事情:ls -l | grep^- | awk'{for(i = 1; i <9; i ++)$ i =「」; print}'| sed's/^ //'可能嗎? – user1484782

+0

@ user1484782 1)是的,謝謝你指出 - 那裏肯定有引號。我已經更新了我的答案。 2)可能有一種方法來保存awk中的空間,但我無法正確地想到它。 shell版本更短,更直接地代表你正在做的事情,所以我會堅持。 3)歡迎來到堆棧溢出! 4)不要忘記選擇我的答案作爲您選擇的答案。如果稍後有人出現更好的答案,您隨時都可以更改。 –

0

這似乎適用於名稱中包含多個空格的文件。將其減少到單個管道。
我個人喜歡尋找更優雅的東西。

ls -l | awk '/^-/ {for(i=9;i<=NF;i++){printf "%s ", $i}print "";}' 
相關問題