我已经安装了标准ls,我也安装了lsd,这是一个书呆子字体删除取代ls。我之所以提到这一点,是因为错误可能与别名有关。
对于现在的测试,我已经准备好了alias ls=ls来删除我的任何定制命令。
如果我在ls目录中键入/etc,其中显然有几个子文件夹(您可以在没有-d标志的情况下看到这些子文件夹),则会得到以下内容:
>>>root@Unraid:/etc# ls -d /
/
>>>root@Unraid:/etc# ls -d
.
>>>root@Unraid:/etc# lsd -d
./
>>>root@Unraid:/etc# lsd -d /
//缺少的代码点只是一个文件夹图标。为了清晰起见,我用与浏览器兼容的表情符号替换了所有的框。LSD已经安装了几天了,不是问题所在。他们的行为是一样的。
我用>>>作为提示行的前缀,以便更容易地识别它们。
让我们以我的主目录为例。正确的反应是~、lsd和pkg中有两个文件夹
>>>root@Unraid:~# lsd
lsd/ pkg/ appdataUNRAID.code-workspace@ mdcmd@
>>>root@Unraid:~# ls -F
appdataUNRAID.code-workspace@ lsd/ mdcmd@ pkg/
>>>root@Unraid:~# lsd -F
lsd/ pkg/ appdataUNRAID.code-workspace@ mdcmd@
>>>root@Unraid:~# ls
appdataUNRAID.code-workspace lsd mdcmd pkg
>>>root@Unraid:~# ls -lhp
total 0
lrwxrwxrwx 1 root root 30 Mar 14 16:41 appdataUNRAID.code-workspace -> ./appdataUNRAID.code-workspace
drwxrwxrwx 3 root root 140 Mar 18 11:35 lsd/
lrwxrwxrwx 1 root root 21 Mar 13 18:55 mdcmd -> /usr/local/sbin/mdcmd
drwxrwxrwx 2 root root 140 Mar 24 10:10 pkg/同样,这里缺少这些图标,但是这里的单一目录"lsd“有正确的文件夹图标。这两个命令都使用适当的标志。
在这里,我们可以看到它们很好地使用标志,它们发现这两个目录非常好,但是ls的两个实现只返回-d标志上的.目录,即使与其他标志组合时也是如此。
>>> root@Unraid:~# lsd -d
./
root@Unraid:~# ls -dFl
drwx--x--- 11 root root 420 Mar 24 10:10 ./
## The full text flag also doesn't work.
root@Unraid:~# ls --directory
.如果D标志位于ls的两个独立实现中,则只显示当前目录.,
我的意思是,它甚至没有显示默认的..第二个目录。我也尝试过添加递归。
发生什么事了呢?
发布于 2022-03-24 16:07:42
当您提供-d选项时,您告诉ls您不希望它列出任何目录的内容,只列出目录名称本身。当您不向ls提供任何附加参数时,默认情况是列出当前目录。因此,在ls -d上的变体都显示了正确的东西--当前目录的名称:.。
发布于 2022-10-31 13:55:56
默认情况下,ls将显示关于每个给定名称的信息,但任何目录除外。如果给出任何目录,它将扫描每个目录以获得一个名称列表,然后显示有关这些目录的信息。
但是,-d选项会抑制这种情况,从而导致ls不对目录进行特殊处理,而只显示给定的所有名称的信息。
如果ls被调用时没有路径名参数,那么如果给出.,它就会运行。在没有-d的情况下,这将显示当前目录的内容,但是使用-d,它只会报告. --正如您所观察到的。
https://unix.stackexchange.com/questions/696683
复制相似问题