我在线找到了列出当前目录中所有目录的绝对路径的代码:
ls -d“ $ PWD” / *
代码按预期工作,但是我对代码的工作方式以及最后的“ / *”功能感到困惑。
答案 0 :(得分:1)
首先,ls -d
不仅列出当前目录中所有目录的绝对路径。它还列出了非目录。 -d
告诉ls
不要列出目录的内容。 -d
不会告诉ls
排除文件。例如,假设当前目录包含一个名为“ dir”的目录,而“ dir”包含三个文件:
ls dir
# output:
file1 file2 file3
ls -d dir
# output:
dir
ls -d dir/*
# output:
file1 file2 file3
如果只想查找目录,请尝试使用find "$PWD"/* -type d
(包括子目录)或find "$PWD"/* -maxdepth 0 -type d
(不包括子目录)。
"$PWD"/*
呢? PWD
是一个变量,其值为当前工作目录。因此,如果您在/home/anthony
中,则PWD
的值为/home/anthony
。 $PWD
告诉bash
使用PWD
的值,因此键入$PWD/*
等效于键入/home/anthony/*
。
"$PWD"/*
中的双引号怎么办?如果当前目录的路径包含有问题的字符(例如空格),则在这些位置。例如,假设工作目录为/home/anthony/My Documents
:
ls $PWD
# output:
ls: cannot access '/home/anthony/My': No such file or directory
ls: cannot access 'Documents': No such file or directory
ls "$PWD"
# output:
file1 file2 etc...
/
中的"$PWD"/*
呢?没有"$PWD"*
的{{1}}也匹配/
之类的路径,不仅匹配目录/home/anthony1
内的文件。