列出隐藏物品时,如何排除 . 和 ..?

列出隐藏物品时,如何排除 . 和 ..?

ls -d .*仅列出隐藏的“项目”(文件和目录)。(我认为)从技术上讲,它列出了以 开头的每个项目.,其中包括当前目录.及以上..目录。

我还知道ls -A列出了“几乎所有”的项目,包括隐藏和未隐藏的项目,但不包括...。但是,将它们组合起来并ls -dA .*不能列出“几乎所有”隐藏的项目。

列出隐藏物品时如何排除 . 和 ..?

答案1

来自第二个答案:

这在我的计算机上有效(尽管我没有像 OP 那样使用 SSH):

ls -d .!(|.)

如果没有隐藏文件或目录,您将收到一条错误消息:

$ ls -d .!(|.)
ls: cannot access '.!(|.)': No such file or directory

错误消息出现在没有隐藏文件的目录中,因为...被排除。

shopt考虑

来自评论:

ls -d .[!.]*无需extglob

答案2

您可以使用任意一组选项,并使用 在输出流中搜索匹配的字符串或不匹配的字符串grep

来自 grep 手册页:

   grep  searches the named input FILEs (or standard input if no files are
   named, or if a single hyphen-minus (-) is given as file name) for lines
   containing  a  match to the given PATTERN.  By default, grep prints the
   matching lines.

例如如果我的ls -A输出是:

   . .. Desktop Documents Downloads

我的ls -A |grep "Do"想法是:

Documents
Downloads

我也可以使用反向搜索来-v搜索任何内容那不是我的表情。

来自 grep 手册页:

-v, --invert-match select non-matching lines

因此,对于你的情况,表达式将是:ls -d .* |grep "[.][a-z]\|[0-9]"

答案3

您还可以使用find

find . -maxdepth 1 -type f -name '.*'

打印出完整路径,或者:

find . -maxdepth 1 -type f -name '.*' -printf "%f\n"

这也适用于空目录/没有此类文件。

相关内容