本篇文章介绍 Linux ls 命令如何只列出指定目录下的子目录名,和每行只打印一个文件名的方法。

只列出指定目录下的子目录名

在 ls 命令中只列出子目录名

在 Linux 中,ls 命令默认会列出所给目录下的所有文件名,包括子目录名。如果只想列出当前目录下的子目录名,可以使用 ls -d */ 命令。

具体举例说明如下:

$ lstest_dir  test_text$ ls -d */test_dir/$ ls -d *test_dir  test_text

在这个例子中,当前目录下有一个 test_dir 子目录、和一个 test_text 文本文件。

可以看到,ls -d */ 命令只列出 test_dir 子目录名,且目录名以 / 结尾。

ls -d * 命令还是列出了当前目录下的所有文件名。

后面会说明这两个命令的区别。

查看 info ls 对 -d 选项的说明如下:

-d, --directory

List just the names of directories, as with other types of files, rather than listing their contents.

即,ls -d 选项只列出所给参数自身的名称。如果参数中包含目录名,只列出该目录名,不再列出该目录下的所有文件名。如果参数中包含文件名,则列出该文件名。

注意:ls 命令的参数是目录名时,默认是列出该目录下的文件名,包括子目录名。如果没有任何参数,默认使用 ‘.’ 这个参数,也就是列出当前目录下的文件名。

而 ls -d 选项改变了这个行为,不再获取所给目录下的文件信息,只列出所给的目录名。

具体举例说明如下:

$ lstest_dir  test_text$ ls -d.$ ls test_dir$ ls -d test_dirtest_dir

跟上面例子一样,当前目录下有一个 test_dir 子目录、和一个 test_text 文本文件。

ls 命令不提供任何参数时,相当于 ls . 命令,列出当前目录下的文件信息。

ls -d 命令只打印了一个 .,对应当前目录。

ls -d 相当于 ls -d . 命令,而 -d 选项指定列出所给目录名,不列出目录下的文件,所以打印出一个 ‘.’。

ls test_dir 目录打印为空,因为 test_dir 是一个空目录,该目录下没有文件。

ls -d test_dir 目录打印了 test_dir,也就是所给的 test_dir 目录名。

基于上面说明,打开 bash 的调试信息后,可以看到 ls -d */ 命令和 ls -d * 命令的区别如下:

$ set -x$ ls -d */+ ls --color=auto -d test_dir/test_dir/$ ls -d *+ ls --color=auto -d test_dir test_texttest_dir  test_text$ set +x

可以看到,*/ 扩展之后的结果是 test_dir/,只有子目录名,没有文本文件名。那么 ls -d test_dir/ 只列出了这个目录名。

而 * 扩展之后的结果是 test_dir test_text,包含子目录名和文本文件名。那么 ls -d test_dir test_text 会列出所给的子目录名和文件文件名。

使用星号 * 通配符来获取子目录名

上面两个命令最大的区别在于 */ 和 * 的路径名扩展结果不同。

查看 man bash 的 Pathname Expansion 小节,对此说明如下:

If followed by a /, two adjacent *s will match only directories and subdirectories.

即,当星号 * 通配符后面跟着 / 字符时,路径名扩展结果只有目录名和子目录名。

如果只是想获取当前目录下的子目录名,直接为赋值为 */ 即可,不要用引号括起来。

具体举例如下:

$ subdirs=*/$ echo $subdirstest_dir/

可以看到,subdirs=*/ 语句会把 subdirs 变量赋值为当前目录下的子目录名,目录名会以 / 结尾。

当在 shell 脚本中使用时,由于执行 shell 脚本的工作目录可能不固定,可以通过绝对路径来寻址。

具体举例如下:

$ subdirs=/home/sample/*/$ echo $subdirs/home/sample/test_dir/

使用 ls -1 逐行列出文件名

一般来说,ls 命令会在一行中打印多个文件名。如果想要每行只打印一个文件名,可以使用 -1 选项。注意,这里是数字 1,而不是字母 l。

查看 man ls 对 -1 选项说明如下:

-1

list one file per line. Avoid '' with -q or -b

即,-1 选项会让每行只打印一个文件名。

c# 找出目录下的所有子目录_Linux技巧:ls命令只列出子目录名和每行打印一个文件名相关推荐

  1. c# 找出目录下的所有子目录_第9期:Linux下文件系统满的处理

    文件系统满(file system full),几乎是每个程序员都会遇到的问题.它会导致各种神奇的现象,比如程序突然无法启动.日志突然不刷新了等.测试环境,我们通常找出大文件并删除即可.常规的步骤是: ...

  2. c# 找出目录下的所有子目录_C# 基础知识系列- 14 IO篇 文件的操作(2)

    前接上一篇内容. 如果是第一次捧场的小伙伴,为了您阅读的连贯性,烦请扫一眼<C# 基础知识系列- 14 IO篇 文件的操作(1)>.本篇是IO之文件操作的第二篇,介绍一下目录和路径的相关类 ...

  3. c# 找出目录下的所有子目录_Linux操作系统文件目录

    /bin bin是Binary的缩写.这个目录存放着最经常使用的命令. /boot这里存放的是启动Linux时使用的一些核心文件,包括一些链接文件以及镜像文件. /dev dev是Device(设备) ...

  4. c# 找出目录下的所有子目录_C#遍历文件夹,其实只需要一句话!

    在项目中大家肯定偶尔会有遍历文件夹的需求,还在老老实实写递归么?!那怕是骚一点的linq递归,其实都太麻烦了,微软爸爸早就想到我们有这样的需求,直接在框架内部已经实现好了. 遍历文件夹其实只需要一个函 ...

  5. 有26个字母a~z,找出所有字母组合,a、b、c、ab、abc、a~z 都是一个组合(顺序无关)

    有26个字母a-z,找出所有字母组合,a.b.c.ab.abc.a~z 都是一个组合(顺序无关) import java.util.HashSet;public class Test05_3 {pub ...

  6. 目录中的pwd、cd及ls命令

    目录中的pwd.cd及ls命令 1.pwd命令(确定当前所在目录) pwd命令以绝对路径的方式显示用户当前工作目录.命令将当前目录的全路径名称(从根目录)写入标准输出.全部目录使用/分隔.第一个/表示 ...

  7. python 找出图片中的差异点,python opencv对目录下图片进行去重的技巧

    使用python opencv对目录下图片进行去重的方法 版本: 平台:ubuntu 14 / I5 / 4G内存 python版本:python2.7 opencv版本:2.13.4 依赖: 如果系 ...

  8. linux-查找某目录下包含关键字内容的文件

    grep -r "{关键字}"  {路径} 例如: grep -r "test"  /data/reports grep -R --include=" ...

  9. linux中grep命令查找目录下,linux中查找grep与find命令的使用

    在日常工作中,我们常常会在自己的电脑寻找某些不知道放在哪里的私密文件,通常我们会在资源管理器的搜索栏里输入一些关键字去帮助我们快速去定位查找该文件.在linux系统中也有这样的功能,只不过在linux ...

最新文章

  1. 百度程序员发现自己一直无私帮助的女下属其男友在背后教她利用自己完成工作!自己却为了帮她天天加班,冷落自己老婆。...
  2. 利用GitHub搭建博客自定义域名失效问题解决方法
  3. efcore 更新关联表_如何在生产环境下用好EFCore
  4. xlsxwriter 合并单元格_Python3之excel操作xlsxwriter模块
  5. 使用VS2015编写C/C++开始步骤
  6. 这些年,NLP常见的预训练模型剖析
  7. mysql命令导出方法_MySql使用mysqldump 导入与导出方法总结
  8. Flutter MaterialButton组件详细概述
  9. ARC对象内存管理以及强弱指针
  10. 【Python】基于VB、Python、PythonGUI的BMI计算器小程序
  11. 【渝粤题库】广东开放大学 建筑CAD 形成性考核
  12. html图片橡皮擦特效,原生制作的js涂鸦画板特效 可调画笔颜色|粗细|橡皮檫功
  13. 第二章(1):时钟与同步接口
  14. Vue-router:二级路由跳转另一条路由下的子级
  15. 为什么苹果日历不能设置日程_iphone6提醒事项加入日历怎么不提醒我 到时
  16. amesim子模型_AMESim进行实际物理建模及建模的一般过程
  17. 这三款小巧好用的APP,请务必收下
  18. 报错ConnectionString属性尚未初始化。
  19. zbb20180619 mysql windows环境下MySQL重启的命令行说明
  20. C++ 如何判断姓名字符串符合百家姓

热门文章

  1. vscode用作markdown入门2--代码上下标目录字体
  2. 要不是真的喜欢学技术,谁会来用Python爬小姐姐啊
  3. multiprocess模块使用进程池调用apply_async()提交的函数及回调函数不执行问题
  4. 将多个Celery定时任务添加到Systemd
  5. flask执行python脚本_如何从Flask应用程序执行Shell脚本
  6. project进行it项目管理案例_全景项目案例集第18期:给团队打鸡血的最好方式
  7. java 如何判定消息已在队列_【05期】消息队列中,如何保证消息的顺序性?
  8. 样本不均衡、长尾分布问题的方法整理(文献+代码)
  9. leetcode - 646. 最长数对链
  10. XGBoost原理与实例分析