2014-06-05 40 views
0

我有這樣的:慶典:如何顯示包含某個特定文件的第一個目錄名

ls */file 
dir1/file dir2/file dir3/file 

但我只需要第一個目錄名,像這樣的:dir1

我這樣做:

IFS="/" read foo bar <<< "$(ls */file 2>/dev/null)" 
echo $foo 
dir1 

和它的作品,但現在我有subshell過度膨脹ssh問題。有沒有更優雅的方式(沒有subshellssed)來做到這一點?

如果不是,我會發布有關完全不同的問題的問題 - 通過ssh擴展subshells

+0

也許你可以重新考慮我的答案。它不需要子shell。 – konsolebox

+0

我確實(http://stackoverflow.com/a/24055011/3664780),我們可以在一個命令? – Ulrik

回答

2
for F in */file; do 
    D=${F%%/*} 
    break 
done 

另:

F=(*/file); D=${F%%/*} 
+3

其實,這會給出文件名。 OP想要目錄。我認爲你的意思是:'$ {F %%/*}'=) – savanto

0

嘗試

ls */file | cut -d"/" -f1 

使用/作爲分隔符。

+0

是的,我忘了提及我沒有在那個系統上切... – Ulrik

0

可以使用棘手雙引號! 像這樣:

LIST=`ls */file` 
echo "$LIST" | cut -d/ -f1 

echo "$LIST" | awk -F/ {'print $1'} 
0

你可以用-d選擇使用內置的閱讀公告:

read -d '/' a < <(echo */file) 
echo "$a" 
dir1 
+0

檢查更新,我有一個錯字。 – anubhava

+0

@anubhava是的,只是想編輯,但你更快。 好吧,所以這看起來是最好的解決方案,但我有一個與ssh的子shell擴展有關的問題。我厭倦逃避括號,但它不起作用。有什麼建議麼? – Ulrik

+0

讓我測試一下ssh併發布修改後的版本。 – anubhava

0

如果你只需要在文件夾的名稱,你可以使用:

$ls -1 | awk 'NR==n' 

其中n=1是第一個目錄,您可以更改n的值以獲取第n個目錄。

相關問題