我需要使用ls -l
,我希望结果只是文件名的第一个单词,例如像这样的结果
-rw-r--r-- 1 root root 9 Sep 21 23:11 best file 1.txt
我想只有
best
因为我需要将此值放入变量中。如果有另一种方法而不是使用ls -l
,也可以。
...抱歉再次打扰你...如果文件在子目录下,我怎样才能从结果中隐藏文件夹?感谢
答案 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
来过滤输出正确的文件。