如何在 Linux 中仅列出目录
Linux 中的 ls命令用于列出任何目录的内容。
默认情况下,它列出所有内容,无论是文件、目录、链接还是命名管道。
但是如果你只想列出目录怎么办?该怎么做?
与 Linux 中的任何事物一样,有多种方法可以完成相同的任务。仅列出目录也没什么不同:
- ls-d */
- ls -l | grep '^d'
- 查找 . -maxdepth 1 -type d
- 回显 */
- 树-d-L 1
别担心。我会详细解释的。下面是我将在示例中使用的目录的内容:
使用 ls 命令仅列出目录
使用熟悉的 ls 命令来执行此操作总是好的,因为这是用于显示目录内容的命令。
要仅列出子目录,请使用-d
ls 命令的选项,如下所示:
ls -d */
以下是其显示的输出:
[abhishek@localhost Documents]$ ls -d */
another_dir/ my_dir/
为什么*/
?因为没有它,ls -d
只会返回目录名称。-d
选项列出目录而不是其内容(包括文件、目录等)。
是*/
一个模式。使用*
,您可以列出所有内容(包括子目录的内容),并将/
模式限制在目录中。
这张图片很好地描述了这种差异。
您可以将它与长列表选项-l
和大多数其他选项结合使用:
[abhishek@localhost Documents]$ ls -ld */
drwxrwxr-x. 1 abhishek abhishek 16 Nov 7 18:22 another_dir/
drwxrwxr-x. 1 abhishek abhishek 44 Nov 7 18:22 my_dir/
如果您不想在目录名称末尾出现斜杠(/),您可以使用 cut 命令将其删去:
[abhishek@localhost Documents]$ ls -ld */ | cut -f1 -d'/'
drwxrwxr-x. 1 abhishek abhishek 16 Nov 7 18:22 another_dir
drwxrwxr-x. 1 abhishek abhishek 44 Nov 7 18:22 my_dir
仅列出特定目录中的子目录
上述命令在当前目录中有效。如果你不在同一目录中怎么办?
*/
在这种情况下,您可以在目录路径的末尾使用ls -d
:
ls -d Path/To/Dir/*/
下面是一个示例,我移出 Documents 目录,然后仅列出 Documents 目录内的目录:
[abhishek@localhost ~]$ ls -ld Documents/*/
drwxrwxr-x. 1 abhishek abhishek 16 Nov 7 18:22 Documents/another_dir/
drwxrwxr-x. 1 abhishek abhishek 44 Nov 7 18:22 Documents/my_dir/
您是否注意到它没有列出隐藏目录?这是此方法的一个缺点。您可能使用它ls -d .*/
来显示隐藏目录,但它只显示隐藏目录。
结合使用 ls 和 grep 命令
您始终可以依靠古老的 grep 命令来过滤特定内容的输出。
如果您详细列出内容,您就可以识别目录,因为目录以 开头d
。
您可以使用 grep 来过滤以 d 开头的内容:
ls -l | grep '^d'
但是这会给你提供比目录名称更多的字段:
[abhishek@localhost Documents]$ ls -l | grep '^d'
drwxrwxr-x. 1 abhishek abhishek 16 Nov 7 18:22 another_dir
drwxrwxr-x. 1 abhishek abhishek 44 Nov 7 18:22 my_dir
使用 find 命令仅列出目录
以下是如何使用 find 命令仅列出子目录:
find directory_path -maxdepth 1 -type d
我希望您熟悉 find 命令。尽管如此,我还是会解释一下。
使用type d
,您可以要求 find 命令仅查找目录。
您maxdepth 1
要求 find 命令仅在当前级别进行搜索(而不是进入子目录)。
[abhishek@localhost Documents]$ find . -maxdepth 1 -type d
.
./my_dir
./another_dir
./.my_hidden_dir
正如您在上面的输出中看到的,它还显示了隐藏目录。
使用 tree 命令仅列出目录
如果您的目的仅是列出目录,您也可以使用 tree 命令。
默认情况下,tree 命令会显示完整的目录结构。您可以修改它以仅显示目录并仅显示当前级别。
tree -dai -L 1
- d - 仅查找目录
- a -查找隐藏的文件和目录
- i - 从显示中删除树结构
- L 1-不要进入子目录
输出如下:
abhishek@localhost Documents]$ tree -dai -L 1
.
another_dir
my_dir
.my_hidden_dir
3 directories
使用 echo 命令列出目录
不太可能的候选人?您会惊讶地发现Linux 中的 echo 命令也可用于显示目录的内容。尝试使用echo *
并亲自查看。
与 ls 命令类似,您也可以使用*/
模式仅列出当前工作目录中的目录。
echo */
以下输出与使用该命令获得的输出相同ls -d
:
可能还有更多方法可以仅列出目录而不列出文件。事实上,根据您要查找的内容,此处讨论的方法可能有一些条件。
如果您的目的只是显示目录,那么我讨论的大多数命令都可以使用。如果您想要更具体的内容,例如仅获取带有斜杠等的目录名称,则必须自行进行一些格式化。
希望您觉得这个 Linux 技巧有用。欢迎提出问题和建议。