0

我有这个:

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

但我只需要第一个目录名,如下所示:dir1

我这样做了:

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

它有效,但现在我在subshell扩展时遇到了问题ssh。有没有更优雅的方式(没有subshellsor sed)来做到这一点?

如果没有,我将发布一个关于完全不同问题的问题 -subshells扩展ssh.

4

5 回答 5

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

其他:

F=(*/file); D=${F%%/*}
于 2014-06-05T07:10:12.227 回答
0

尝试

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

用作/分隔符。

于 2014-06-05T07:08:30.067 回答
0

您可以使用棘手的双引号!像这样:

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

或者

echo "$LIST" | awk -F/ {'print $1'}
于 2014-06-05T07:12:40.497 回答
0

-d您可以使用带有选项的内置阅读公告:

read -d '/' a < <(echo */file)
echo "$a"
dir1
于 2014-06-05T07:20:16.657 回答
0

如果您只需要文件夹的名称,您可以使用:

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

第一个目录在哪里n=1,你可以改变它的值得n到第n个目录。

于 2014-06-05T07:28:37.157 回答