Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash:如何显示包含特定文件的第一个目录的名称_Bash_Ssh_Ls_Subshell - Fatal编程技术网

bash:如何显示包含特定文件的第一个目录的名称

bash:如何显示包含特定文件的第一个目录的名称,bash,ssh,ls,subshell,Bash,Ssh,Ls,Subshell,我有这个: ls */file dir1/file dir2/file dir3/file 但我只需要第一个目录名,如下所示:dir1 我这样做: IFS="/" read foo bar <<< "$(ls */file 2>/dev/null)" echo $foo dir1 IFS=“/”读取食物条尝试 使用/作为分隔符 for F in */file; do D=${F%%/*} break done 另一个: F=(*/file); D=$

我有这个:

ls */file
dir1/file dir2/file dir3/file
但我只需要第一个目录名,如下所示:
dir1

我这样做:

IFS="/" read foo bar <<< "$(ls */file 2>/dev/null)"
echo $foo
dir1
IFS=“/”读取食物条尝试

使用
/
作为分隔符

for F in */file; do
    D=${F%%/*}
    break
done
另一个:

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

你可以使用巧妙的双引号! 像这样:


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

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

read-d'/'a<如果您只需要可以使用的文件夹名称:

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

如果
n=1
是第一个目录,您可以更改
n
的值以获得第n个目录。

实际上,这将给出文件名。OP想要一个目录。我想你的意思是:
${F%%/*}
=)@anubhava是的,只是想编辑一下,但是你更快了。好的,这似乎是最好的解决方案,但是我在ssh上进行子shell扩展时遇到了一个问题。我厌倦了逃避括号,但它不起作用。有什么建议吗?@Ulrik:以下命令在ssh上对我有效:
ssh localhost“read-d'/'a<请注意-如果您使用ssh连接到localhost,您需要位于不同的目录中才能看到它失败。
(echo*/file)
子shell在本地执行,字符串通过ssh发送读取。您尝试过:
ssh localhost”read-d'/'a
cd/
ssh localhost“cd foo;read-d'/'a也许你可以重新考虑我的答案。它不需要子shell。我做了(),我们可以在一个命令中完成吗?
echo "$LIST" | awk -F/ {'print $1'}
read -d '/' a < <(echo */file)
echo "$a"
dir1
$ls -1 | awk 'NR==n'