如何列出一个文件夹的所有文件,但不列出其文件夹或子文件。换句话说:我如何只列出文件?
答案 0 :(得分:82)
使用find
:
find . -maxdepth 1 -type f
使用-maxdepth 1
选项可确保您只查看当前目录(或者,如果将.
替换为某个路径,则该目录)。如果您想要该子目录中的所有文件的完整递归列表,只需删除该选项。
答案 1 :(得分:5)
ls -p | grep -v /
ls -p允许您显示/后面的文件夹名称,作为您要删除的标记。
答案 2 :(得分:4)
carlpett's find
-based answer(find . -maxdepth 1 -type f
)原则上有效,但与使用ls
不完全相同:您可能未排序所有前缀为./
的文件名列表,您将无法应用ls
多个选项 ;
另外find
总是发现隐藏的项,而ls
'行为取决于-a
或-A
选项的存在与否。
Alex Hall在问题评论中建议的改进是将 shell globbing 与find
合并强>:
find * -maxdepth 0 -type f # find -L * ... includes symlinks to files
ls
'许多其他排序/输出格式选项。 Hans Roggeman's ls
+ grep
answer实用,但会阻止您使用长(-l
)输出格式。
为了解决这些限制,我写了fls
(filtering ls) utility,
ls
同时还提供类型过滤功能 的实用程序,f
用于文件,d
用于目录,l
用于符号链接在ls
个参数列表之前(运行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
安装Node.js后,按如下方式安装:
[sudo] npm install fls -g
注意强>:
是否需要sudo
取决于您安装Node.js / io.js的方式以及您是否changed permissions later;如果您收到EACCES
错误,请使用sudo
再次尝试。
-g
确保global installation,并且需要将fls
放入您的系统$PATH
。
bash
script下载为fls
。chmod +x fls
使其可执行。$PATH
中的文件夹,例如/usr/local/bin
(macOS)或/usr/bin
(Linux)。答案 3 :(得分:2)
我喜欢使用ls
选项作为示例:
-l
使用长列表格式-t
按修改时间排序,最新的优先-r
排序时倒序-F
,--classify
将指示符(* / => @ |之一)附加到条目-h
,带有{-1和-s的--human-readable
,打印尺寸如1K 234M 2G等...
有时--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 '.*'
:
find /some/path -maxdepth 1 ! -type d ! -name '.*' -exec ls -hltrF {} +
然后
您可以将/some/path
替换为.
,以列出当前目录,或..
列出父目录。
答案 4 :(得分:1)
您还可以将ls
与grep
或egrep
一起使用,并将其作为别名放入您的个人资料中:
ls -l | egrep -v '^d'
ls -l | grep -v '^d'
答案 5 :(得分:1)
查找文件:ls -l / home | grep“ ^-” | tr -s''|切-d''-f 9
查找目录:ls -l / home | grep“ ^ d” | tr -s''|切-d''-f 9
查找链接:ls -l / home | grep“ ^ l” | tr -s''|切-d''-f 9
tr -s''将输出转换为以空格分隔的文件 cut命令说定界符是一个空格,并返回第9个字段(始终是文件名/目录名/链接名)。
我一直都在用这个!
答案 6 :(得分:0)
{ find . -maxdepth 1 -type f | xargs ls -1t | less; }
添加xargs
以使其有效,并使用-1
代替-l
仅显示没有其他ls
信息的文件名
答案 7 :(得分:0)
ls -l | grep '^-'
cut
或 awk
。ls -l | grep '^-' | awk '{print $9}'
ls -l | grep '^-' | cut -d " " -f 13
答案 8 :(得分:-1)
使用正则表达式:
ls -al | egrep -v“^ d。*”
答案 9 :(得分:-2)
再加上carlpett的回答。 对于文件的一个非常有用的视图,您可以将输出传递给ls。
find . -maxdepth 1 -type f|ls -lt|less
以列表格式显示最近修改过的文件,在下载大量文件时非常有用,并希望查看最近版本的非杂乱版本。
答案 10 :(得分:-2)
&#34;找到&#39; -maxdepth&#39; &#34;不适用于旧版本的bash,因此我使用:
表示$(ls)中的f;如果[-f $ f];然后回显$ f; fi;完成