gpt4 book ai didi

linux - Unix 命令 ls -lrt 给出意想不到的结果

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:51:26 25 4
gpt4 key购买 nike

所以我正在做我的工作,我需要列出文件夹中的一些特定文件。我输入ls -lrt *ABCD*201604*它返回了*ABCD*201604* 未找到

然后为了查看这些文件是否真的存在,我执行了 ls -lrt 并发现有这样的文件。

接下来,我在输入命令 ls -lrt *ABCD*201604* 时从列出的文件中复制了 ABCD201604 并且成功了!

我比较了我的两个命令,看看我是否做错了,但发现它们完全相同。对这种行为有什么解释吗?

我写的一个:

$ ls -lrt *RFPTDW*20160425*
*RFPTDW*20160425* not found

我复制的一个:

$ ls -lrt *RFPTDW*20160425*
RFPTDW107_01_01_20160425_1526.txt
RFPTDW059_01_01_20160425_1527.txt

在第二个输出中,我省略了文件名以外的其他细节。

最佳答案

shell 负责扩展命令行上的 glob。执行的命令看不到那些通配符:它看到的是扩展参数。

如果您想查看它们是如何展开的,请尝试在您想要的命令前加上 echo。像这样:

$ touch ABCD
$ touch 201604
$ touch foo_ABCD_bar_201604_baz
$ echo ls -lrt *ABCD*
ls -lrt ABCD foo_ABCD_bar_201604_baz
$ echo ls -lrt *201604*
ls -lrt 201604 foo_ABCD_bar_201604_baz
$ echo ls -lrt *ABCD*201604*
ls -lrt foo_ABCD_bar_201604_baz
$ rm foo_ABCD_bar_201604_baz
$ echo ls -lrt *ABCD*201604*
ls -lrt *ABCD*201604*

请注意,在最后一行,glob 不再扩展为文件名,因此 ls 命令将被传递参数 *ABCD*201604*,它命名一个不存在的文件。

编辑:

如果您在实际命令前加上 echo,我希望您的结果是

$ echo ls -lrt *RFPTDW*20160425*
ls -lrt *RFPTDW*20160425*

在第一种情况下,

$ echo ls -lrt *RFPTDW*20160425*
ls -lrt RFPTDW107_01_01_20160425_1526.txt RFPTDW059_01_01_20160425_1527.txt

第二种情况。在第一种情况下,文件不存在,因此 glob 不会扩展为任何内容。在第二种情况下,一些文件与 glob 匹配,因此 shell 可以扩展它。

关于linux - Unix 命令 ls -lrt 给出意想不到的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36851173/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com