![列出隐藏物品时,如何排除 . 和 ..?](https://linux22.com/image/1206129/%E5%88%97%E5%87%BA%E9%9A%90%E8%97%8F%E7%89%A9%E5%93%81%E6%97%B6%EF%BC%8C%E5%A6%82%E4%BD%95%E6%8E%92%E9%99%A4%20.%20%E5%92%8C%20..%EF%BC%9F.png)
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"
这也适用于空目录/没有此类文件。