如何列出一个文件夹的所有文件,但不列出它们的文件夹或子文件。换句话说: 我怎样才能只列出文件?
使用 find:
find
find . -maxdepth 1 -type f
使用 -maxdepth 1选项可以确保您只查看工作目录(或者,如果您使用某个路径替换 .,则查看该目录)。如果您想要该目录和子目录中所有文件的完整递归列表,只需删除该选项。
-maxdepth 1
.
你也可以将 ls与 grep或 egrep一起使用,并将它作为别名放在你的配置文件中:
ls
grep
egrep
ls -l | egrep -v '^d' ls -l | grep -v '^d'
我只是想补充 Carlpett 的回答。 对于非常有用的文件视图,您可以将输出通过管道传送到 ls。
find . -maxdepth 1 -type f|ls -lt|less
以列表格式显示最近修改的文件,在下载了大量文件并希望查看最近文件的非混乱版本时非常有用。
Carlpett 的基于 find的答案 (find . -maxdepth 1 -type f)原则上有效,但是是 与使用 ls不太一样: 您可能会得到一个以 ABC3 为前缀的文件名列表,这样您就失去了应用 ls的许多 < em > 选项 的能力; find也是 总是找到隐藏的东西,而 ls的行为取决于 -a或 -A选项的存在与否。
-a
-A
Alex Hall在对问题的评论中建议的 进步是对 将 < em > shell globbing 与 find组合的:
find * -maxdepth 0 -type f # find -L * ... includes symlinks to files
汉斯 · 罗格曼的 ABC0 + grep答案 是务实的,但 使用 long (-l)输出格式锁定您。
-l
为了解决这些限制,我编写了 fls 强 > ( f 强 > 阉割 ls 强 >)效用,
fls
l
fls --help
fls --man
例子:
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)
支撑平台
注意: 即使您不使用 Node.js,它的包管理器 npm也可以跨平台工作,并且易于安装; 请尝试 curl -L https://git.io/n-install | bash
npm
curl -L https://git.io/n-install | bash
安装了 Node.js后,安装如下:
[sudo] npm install fls -g
注意 :
是否需要 sudo取决于如何安装 Node.js/io.js 以及是否安装了 更改后的权限; 如果出现 EACCES错误,请使用 sudo再试一次。
sudo
EACCES
该 -g确保 < em > 通用 安装,是需要把 fls在您的系统的 $PATH。
-g
$PATH
bash
chmod +x fls
/usr/local/bin
/usr/bin
“ find’-maxdeep’”不适用于旧版本的 bash,因此我使用:
For f in $(ls) ; do if [-f $f ] ; then echo $f; fi; done
{ find . -maxdepth 1 -type f | xargs ls -1t | less; }
增加了 xargs使其工作,并使用 -1而不是 -l只显示文件名没有额外的 ls信息
xargs
-1
ls -p | grep -v /
Ls-p 允许在文件夹名称后显示/,该名称充当要删除的标记。
查找文件: ls-l/home | grep“ ^-”| tr-s’’| cut-d’’-f9
查找目录: ls-l/home | grep“ ^ d”| tr-s’’| cut-d’-f9
查找链接: ls-l/home | grep“ ^ l”| tr-s’’| cut-d’-f9
Tr-s’将输出转换为空格分隔的文件 Cut 命令表示分隔符是一个空格,并返回第9个字段(始终是文件名/目录名/链接名)。
我经常用这个!
我喜欢使用 ls选项,例如:
-l使用长列表格式 -t按修改时间排序,最新排在第一位 排序时 -r倒序 -F,--classify向条目追加指示符(*/= >@|)之一 -h,--human-readable与-l 和-s,打印尺寸像1K 234M 2G 等..。
-t
-r
-F
--classify
-h
--human-readable
有时 --color和所有其他的。(见 ls --help)
--color
ls --help
这将显示文件、符号链接、设备、管道、套接字等。
所以
find /some/path -maxdepth 1 ! -type d
可以很容易地按日期分类:
find /some/path -maxdepth 1 ! -type d -exec ls -hltrF {} +
或者
find /some/path -maxdepth 1 -type f
按大小分类:
find /some/path -maxdepth 1 -type f -exec ls -lSF --color {} +
为了不显示名称以点开头的隐藏条目,可以添加 ! -name '.*':
! -name '.*'
find /some/path -maxdepth 1 ! -type d ! -name '.*' -exec ls -hltrF {} +
然后
你可以用 .代替 /some/path,列出 工作目录或 ..,列出 父目录。
/some/path
..
ls -l | grep '^-'
cut
awk
ls -l | grep '^-' | awk '{print $9}' ls -l | grep '^-' | cut -d " " -f 13
你可以这样做:
echo *.* | cut -d ' ' -f 1- --output-delimiter=$'\n' echo *.* | tr ' ' '\n' echo *.* | sed 's/\s\+/\n/g' ls -Ap | sort | grep -v /
此方法不使用外部命令。
bash$ res=$( IFS=$'\n'; AA=(`compgen -d`); IFS='|'; eval compgen -f -X '@("${AA[*]}")' ) bash$ echo "$res" . . .