在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 处只有一个.
?
简而言之,这是否意味着:
ls -l
==ls -l .
列出当前目录下的所有内容ls -l *
= 列出当前目录中的所有内容 + 子目录中的内容ls -ld
==ls -ld .
列出当前目录,但不列出其内容(因此是 .)ls -l */
= 列出当前目录中的所有子目录+其内容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
它确实显示了一个结果:它显示了当前目录,称为.
!