Bash:如何只列出文件?

如何列出一个文件夹的所有文件,而不是其文件夹或子文件。 换句话说:我怎样才能列出文件?

使用find

 find . -maxdepth 1 -type f 

使用-maxdepth 1选项可确保只查看当前目录(或者,如果用某个pathreplace.目录)。 如果你想要一个完整的recursion列表中的所有文件和子目录,只要删除该选项。

你也可以将lsgrepegrep一起使用,并把它作为别名放在你的configuration文件中:

 ls -l | egrep -v '^d' ls -l | grep -v '^d' 
  • carlpett的基于find的答案原则上是行得通的,但是与使用ls不太一样:你会得到一个前缀为./的文件名的潜在未sorting列表,而且你失去了应用ls的许多选项的能力。
    find 总是find隐藏的项目,而我的行为取决于存在或不存在的-a-A选项。

    • 亚历克斯·霍尔 ( Alex Hall)在这个问题上提出的一个改进就是把shell和glob结合起来:

        find * -maxdepth 0 -type f # find -L * ... includes symlinks to files 
      • 然而,虽然这解决了前缀问题,并给你按字母顺序sorting的输出,你仍然没有(内联)控制包含隐藏的项目,也没有访问ls的许多其他sorting/输出格式选项。
  • Hans Roggeman的ls + grep答案是实用的,但是使用long( -l )输出格式locking你。


为了解决这些限制,我写了(fs) ls

  • 提供ls的输出灵活性的实用程序,同时还提供types过滤function
  • 简单地通过在ls参数列表(例如运行fls --helpfls --man以了解更多信息)之前放置types过滤字符 (如f的文件, d的目录和l的符号链接 )。

例子:

 fls f # list all files in current dir. fls d -tA ~ # list dirs. in home dir., including hidden ones, most recent first fls f^l /usr/local/bin/c* # List matches that are files, but not (^) symlinks (l) 

安装

支持的平台

  • npmregistry安装时: LinuxOSX
  • 手动安装时:任何类似Unix的平台与Bash

从npmregistry

注意:即使您不使用Node.js,其包pipe理器npm可以跨平台工作,并且易于安装。 尝试
curl -L https://git.io/n-install | bash

使用Node.js或io.js安装,如下所示:

 [sudo] npm install fls -g 

注意

  • 无论你需要sudo取决于你如何安装Node.js / io.js以及你是否稍后改变了权限 , 如果您收到EACCES错误,请使用sudo重试。
  • -g确保全局安装 ,并且需要将fls放入系统的$PATH

手动安装

  • 下载这个bash脚本为fls
  • 使用chmod +x fls来执行它。
  • 将它移动或符号链接到$PATH的文件夹,例如/usr/local/bin (OSX)或/usr/bin (Linux)。

用正则expression式:

ls -al | egrep -v“^ d。*”

“find'-maxdepth'”不适用于我旧版本的bash,因此我使用:

对于$(ls)中的f; 如果[-f $ f]; 然后echo $ f; fi; DONE

我使用这个语法:

 find -maxdepth 1 -type f | ls 

所以我只能列出当前目录中的文件,并将它们给予ls以获得很好的显示效果。

 { find . -maxdepth 1 -type f | xargs ls -1t | less; } 

添加xargs使其工作,并使用-1而不是-l只显示文件名,没有额外的ls信息

 ls -p | grep -v / 

ls -p可让您显示/显示文件夹名称后面的文件夹名称,您可以将其作为要删除的标记。

只要加上carlpett的答案。 要获得对这些文件非常有用的视图,可以将输出传递给ls。

 find . -maxdepth 1 -type f|ls -lt|less 

以列表格式显示最近修改过的文件,当您下载了大量文件并且希望看到最近版本的非混乱版本时非常有用。