列出目录并理解 ls

列出目录并理解 ls

ls手册页上,我看到了这个

 -d, --directory

    list directory entries instead of contents, and do not 
    dereference symbolic links

在我当前的文件夹中:

drwxr-xr-x 2 oracle oinstall 4.0K Jul 13 11:52 folderd
drwxr-xr-x 2 oracle oinstall 4.0K Jul 13 11:52 folderc
drwxr-xr-x 2 oracle oinstall 4.0K Jul 13 11:52 folderb
drwxr-xr-x 2 oracle oinstall 4.0K Jul 13 11:52 foldera
-rw-r--r-- 1 oracle oinstall    0 Jul 13 11:52 filed
-rw-r--r-- 1 oracle oinstall    0 Jul 13 11:52 filec
-rw-r--r-- 1 oracle oinstall    0 Jul 13 11:52 fileb
-rw-r--r-- 1 oracle oinstall    0 Jul 13 11:52 filea

q1) 向ls -ld我展示.- 为什么?

[oracle@centos1 script]$ ls -ld
drwxr-xr-x 6 oracle oinstall 4096 Jul 13 11:52 .

执行 a ls -l *,给我所有内容,包括文件夹中的文件:

[oracle@centos1 script]$ ls -l *
-rw-r--r-- 1 oracle oinstall    0 Jul 13 11:52 filea
-rw-r--r-- 1 oracle oinstall    0 Jul 13 11:52 fileb
-rw-r--r-- 1 oracle oinstall    0 Jul 13 11:52 filec
-rw-r--r-- 1 oracle oinstall    0 Jul 13 11:52 filed

foldera:
total 0
-rw-r--r-- 1 oracle oinstall 0 Jul 13 11:57 fileafolda
-rw-r--r-- 1 oracle oinstall 0 Jul 13 11:55 fileainfolda

folderb:
total 0

folderc:
total 0

folderd:
total 0

执行 als -ld */它显示了正确的结果,只有文件夹。

[oracle@centos1 script]$ ls -ld */
drwxr-xr-x 2 oracle oinstall 4096 Jul 13 11:57 foldera/
drwxr-xr-x 2 oracle oinstall 4096 Jul 13 11:52 folderb/
drwxr-xr-x 2 oracle oinstall 4096 Jul 13 11:52 folderc/
drwxr-xr-x 2 oracle oinstall 4096 Jul 13 11:52 folderd/

q3)ls实际上接受什么作为参数? *这里指的是包括文件夹在内的所有内容。表示*/仅文件夹,-d此处删除文件夹内容。

如果是这样的话,为什么根本不ls -ld显示任何结果。 q1 处只有一个.

简而言之,这是否意味着:

  1. ls -l==ls -l .列出当前目录下的所有内容
  2. ls -l *= 列出当前目录中的所有内容 + 子目录中的内容
  3. ls -ld==ls -ld .列出当前目录,但不列出其内容(因此是 .)
  4. ls -l */= 列出当前目录中的所有子目录+其内容
  5. ls -ld */= 列出当前目录中的所有子目录,但不列出其内容

q1) 但我不明白下面的内容

假设我在里面/script

ls -l *→ 列出当前目录中的所有内容,包括子目录的内容。

ls -ld *→ 列出当前目录中的所有内容,不包括子目录的内容。

这里-d是对当前目录下的子目录生效。

但是ls -ld .→“-d”并不意味着用于子目录,而是实际上用于当前目录本身。

我不明白为什么影响-d当前目录而不是其内容。

答案1

q1) 执行 ls -ld 显示一个 . - 为什么 ?

当您不给 指定任何参数时ls,默认情况下是在当前目录(也称为..通常这意味着列出目录的内容,但您使用了-d请求列出目录的选项本身,而不是其内容。这样您就可以获得.当前目录的信息。

执行 ls -ld *,给我所有内容,包括文件夹中的文件

不,事实并非如此。ls -ld *将列出当前目录中匹配的每个文件*(除了隐藏文件之外的所有文件)但是不是那些目录的内容,同样是因为您使用了-d.请注意,您的示例输出做了一些不同的事情,因为它确实不是使用-d

执行 ls -ld */ 它显示了正确的结果,只有文件夹。

只有目录与该模式匹配*/,因为常规文件的路径名不能以/.

q3)“ls”实际上接受什么作为参数? * 这里表示包括文件夹在内的所有内容。 */ 表示仅文件夹,-d 此处删除文件夹内容。

都基本正确。展开:*匹配除隐藏文件之外的所有内容,*/相同但仅匹配目录,并且您对该-d选项的含义恰到好处。

如果是这样的话,为什么 ls -ld 根本不显示任何结果。只有一个 .在 q1

它确实显示了一个结果:它显示了当前目录,称为.!

相关内容