Answers:
这听起来像是一份工作find
。
-maxdepth
只返回当前目录,里面的子文件夹不recursivly搜索-type f
仅返回文件,而不是目录或设备节点或其他任何-not
和-name
避免出现名称不需要的文件,请结合使用它可能像这样合并在一起:
find /path/to/uploads -maxdepth 1 -type f -not -name 't_*'
-exec ls -lG -- {} +
在他的答案中提到了使用ls的额外选项来获取输出。您也可以-ls
在此查找中添加一个,以快速粗略地了解ls的详细视图。
GNU ls(即,非嵌入式Linux系统和Cygwin上的ls命令,也可在其他unices上使用)具有根据文件名隐藏某些文件的选项。但是,无法忽略目录。
ls --hide='t_*' uploads
另一种方法是使您的外壳进行匹配。Bash,ksh和zsh具有一个否定模式!(t_*)
以匹配除匹配文件以外的所有文件t*
;在bash中,此功能需要启用shopt -s extglob
,在zsh中,需要启用setopt ksh_glob
。Zsh还具有^t_*
需要使用开启的等效语法setopt extended_glob
。这仍然不会忽略目录。Zsh有一个额外的功能,它不仅可以按名称匹配文件,还可以按元数据和其他匹配文件:glob限定符。(.)
在比赛结束时添加以限制为常规文件。否定^
是名称匹配语法的一部分,因此^t_*(.)
表示“所有常规文件均不匹配t_*
”,而不是“所有常规文件均不匹配t_*
”。
setopt extended_glob # put this in your ~/.zshrc
ls uploads/^t_*(.)
如果您发现自己没有高级工具,则可以使用在任何unix上执行此操作find
。这不是您通常在命令行上键入的内容,但功能强大且精确。Caleb已经展示了如何使用GNU find做到这一点。该-maxdepth
选项不可移植;您可以改-prune
而使用,以方便地停止find
递归。
find uploads/* -type d -prune -o \! -type f -name 't_*' -print
替换-print
为-exec ls -lG -- {} +
以ls
对文件执行您喜欢的选项。
上面的所有命令都隐藏点文件(即名称以开头的文件.
)。如果要显示它们,请传递-A
至ls
,或D
在zsh(ls uploads/^t_*(.D)
)中添加glob限定符。使用find
,您可以使用另一种方法,使其仅递归一个级别(find
不专门处理点文件)。仅当您find
在当前目录中运行时,这才完全起作用。
cd uploads && find . -name . -o -type d -prune -o \! -type f -name 't_*' -print
-maxdepth
应该可以使用,但是Gilles提到的“可移植性”问题是BSD find
(我认为也在OSX上找到)有点不同,所以您可能也需要他的回答。@Gilles:zsh技巧+1!
prune
我想到了一些关于s的不那么多汁的评论,但是我只是简单地说,当我在自己的系统上乱搞的时候,认为“ 如果我在运行此命令,该命令会起作用 ”的次数“ AIX,Solaris或MINIX3 ”大约是...待机...我很难读到电表...显示器被冻结0.00
。
ls
没有--use-telepathy
选择权吗?这是仅显示所需文件的最快方法。它可能不是便携式的。
ls -l /folder | grep ^- | awk '{print $9}'
$9
在这个声明?
ls
输出。
print
IMO,$ NF`会更好。$ NF表示字段数,该字段数为9,在AWK中很常见,它是向其他人介绍$ NF的好机会。
ls -l | grep -v ^d | grep name$
find
?
让我用ls
and管道试一下:
ls -l --hide='t_*' uploads/ | grep -v ^d | tr -s ' ' | cut -d ' ' -f 9
说最后一列是第9列。
如果担心find的-maxdepth可移植性问题,则可以使用:
ls -l uploads/ | awk '/^-/ && $9 !~/^t_/ {print $9}'
我不是专家,但我认为这应该可行。我想它看起来有些神秘,但是如果您说awk,实际上不是。可以使用$ NF代替$ 9。您也可以这样做:
ls -l uploads/ | awk '/^-/' | awk '!/^t_/ {print $9}'
哪个做同样的事情(但效率可能不如前一个???)。
实际上,在考虑了其他帖子之后,
ls -l --hide=t_* uploads/ | awk '/^-/ {print $9}'
是更短更清晰的方法。
如果我错了,请有人纠正我。:-)
ls
通常不是一个好主意。例如,您的awk技巧将因包含空格的文件名而失败。
我发现了这些简短的方法:
ls -p uploads | grep -Ev '/'
要么
ls -pIt_* uploads | grep -v /
十分简单:
ls -l --hide 't_*' <absolute path to desired directory> | grep -v ^d