得到第一个单词作为ls -l的结果

时间:2014-09-28 10:13:06

标签: linux bash ls

我需要使用ls -l,我希望结果只是文件名的第一个单词,例如像这样的结果

-rw-r--r--    1 root     root             9 Sep 21 23:11 best file 1.txt

我想只有

best

因为我需要将此值放入变量中。如果有另一种方法而不是使用ls -l,也可以。

...抱歉再次打扰你...如果文件在子目录下,我怎样才能从结果中隐藏文件夹?感谢

5 个答案:

答案 0 :(得分:2)

您不需要使用ls -l(L)。

相反,使用ls -1(第一个),只输出文件的名称,然后使用cut过滤掉第一列:

ls -1 | cut -d' ' -f1
    ^
    number one, not letter L

要将值存储到变量中,请执行:

var=$(ls -1 | cut -d' ' -f1)

请注意,解析ls并不是一件好事:列数可能会有所不同等。您可以在Why you shouldn't parse the output of ls

中详细了解该主题

更新

注意甚至不需要使用-1(一个),ls就足够了:

ls | cut -d' ' -f1

如下面的BroSlow comments"因为它们是EOL(行尾)在管道上分开"

答案 1 :(得分:0)

set -- $(ls -l)
echo ${11}    # Assumes the file is the FIRST one listed.

应该做的伎俩。但我不确定这是否真的是你想要的。首先,ls -l还会打印一个额外的标题行。为什么你说你需要使用ls -l <​​/ em>?如果您能说出实际问题,也许我们可以一起找到更好的解决方案......

答案 2 :(得分:0)

awk可以为您选择第一个单词;

ls | awk '{print $1}'

答案 3 :(得分:0)

尝试:

ls -al|awk 'NR==4{ print $9 }'

第4行将包含第一行文件。 $ 9表示第9列,它将包含所需的单词。

答案 4 :(得分:0)

如果您只输出一行,这将正常工作:

var=`ls -l | awk '{ print $9 }'`
echo ${var}

或者您需要使用grep来过滤输出正确的文件。