仅显示ls别名中的隐藏文件(点文件)


42

我正在使用命令

ls -a | grep '^\.'

仅显示隐藏文件。我加了线

alias hidden='ls -a | grep '^\.'' # show only hidden files

.bash_aliases文件

但这不起作用。这可能是'性格问题。

您能帮我写正确的别名吗?


对于更复杂的示例,您几乎不需要从单引号切换到双引号。只需将引号相互对接即可完成。在这个例子中,'ls -a | grep '"'"'^\.'"'"'它看起来很糟糕(在这个例子中,这是完全没有必要的,因为您可以换成双对中的双引号),但是在极少数情况下,它很有用。您可能还需要-C标志(强制多列输出)。看到这张图片imgur.com/a/VIVFP
Dylan

Answers:


26

要么使内部一对双引号引起来:

alias hidden='ls -a | grep "^\."'

或使外部引号对成为双引号:

alias hidden="ls -a | grep '^\.'"

或者,使所有引号都使用双引号,并逃避内部对:

alias hidden="ls -a | grep \"^\.\""

或使其成为函数,以便在调用时可以传递一些参数:

hidden() { ls -a "$@" | grep '^\.'; }

90

让shell列出点文件,并告诉ls不要浏览目录:

ls -d .*

6
grep基于方法的方法不同,这具有允许多列列出的优点。
酒精2014年

但是,还会显示目录(如上所述)。有什么办法可以保持它的简单并仅显示文件?
honzajde

@honzajde这个问题并没有要求排除目录。如果要排除目录,则可以使用ls -d .* | grep -v '^d'或(仅zsh)print -lr .*(.)
Gilles'SO-别再作恶了

这对我不起作用,在Ubuntu 16.04上
Andrew_1510 '17

9
ls -Ad .* #This will list all the hidden files & directories while retaining the color & formatting

要么

要创建相同的别名:

alias lh='ls -Ad .*'

要么

通过grep命令和管道运算符可以完成相同的操作;但是它会松散颜色和格式:

ls -a|grep "^\." 

要么

通过别名:

alias lh='ls -a|grep "^\."'

4

您可以使用双引号:

alias hidden="ls -a | grep '^\.'"

或连接更多单引号字符串

alias hidden='ls -a | grep '\''^\.'\'

或删除所有内部引号

alias hidden='ls -a | grep ^\\.'

2

从记录来看,这似乎对我不起作用,因为它ls -a打印了两个(有时会更多列)。我建议使用该-1选项,以确保每个文件都在自己的行中。像这样:

alias hidden='ls -a1 | grep "^\."'

我只是尝试ls -a | cat它仍然在2列上输出。我应该提到我使用的是Solaris,而不是GNU ls。也许就是这个原因。在所有情况下,您的-1解决方案都可以完美运行,并且比我骇人的解决方法优雅得多。我正在更新我的答案。
rahmu 2011年

我可能错过了这次讨论,但是如果出现问题,请看这里。
xralf

1

使它稍微复杂一些,但避免解析ls

llsh () { find "${@:-.}/" -maxdepth 1 -type f -name ".*" -ls; }

lsh () { find "${@:-.}/" -maxdepth 1 -type f -name ".*" -print; }

两个shell函数将用于find生成当前目录或命令行给定目录中所有隐藏的常规文件的列表。

llsh函数将生成一个“长列表”,仅比冗长一些ls -l,而lsh生成一个单列列表,如ls -1


0
find . -type f -name ".*"

要么

find . -type f -name ".*" | while read file; do basename $file; done

嗨!您可以通过详细解释其工作原理以及提及您认为其回答问题的原因来改善您的回答。
dhag '17

0
# add it to ~/.bashrc

    hidden() {  # lists hidden files and directories
        find . -maxdepth 1 -name '.?*' -exec ls --color -d {} \;
        }

    hiddenfiles() { # lists hidden files
        find . -maxdepth 1 -type f -name '.?*' -exec ls --color -d {} \;
        }

    hiddendirs() { # lists directories
        find . -maxdepth 1 -type d -name '.?*' -exec ls --color -d {} \;
        }

-1

ls支持-A吗?来自man ls

    -a, --all
          do not ignore entries starting with .

   -A, --almost-all
          do not list implied . and ..

$ ls --version
ls (GNU coreutils) 8.5
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  
Written by Richard M. Stallman and David MacKenzie.

是的,确实可以,但是我想要only隐藏的文件。
xralf

ls -A -1 -d -F .* | egrep -v '/$'
waltinator 2011年

-3

只需简单地键入以下命令,不要与上面解释的内容混淆。

ls -A -1 -d -F .* | egrep -v '/$'

我认为OP要求如何正确编写别名。

1
这只是沃尔丁托尔对其回答的评论的一个副本。为了使该答案有用,您需要解释这些特殊ls标志和egrep命令如何以及为什么回答该问题。
安东尼G-莫妮卡(Monica)

-3
ls -lart | sed -n "/ \.[A-Za-z0-9][A-Za-z0-9]*/p"

2
您能说明一下答案吗,一行代码不算是很好的答案
Romeo Ninov

按照要求,他只需要列出隐藏文件。所以我通过ls -lart列出了所有文件,包括隐藏文件。然后我使用正则表达式显示以dot(。)开头的文件。我有这样的结果。
shailesh Chanderiya

[g906016 @ hklu2574881:[PTA]〜] $ ls -lart | sed -n“ / \。[A-Za-z0-9] [A-Za-z0-9] * / p” -rw-r--r-- 1 g906016 g906016 658 2016年12月29日.zshrc -rw- r--r-- 1 g906016 g906016 171 2016年12月29日.kshrc -rw ------- 1 g906016 g906016 2016年12月29日.k5login -rw-r--r-- 1 g906016 g906016 176 2016年12月29日。 bash_profile -rw-r--r-- 1 g906016 g906016 2016年12月29日.bash_logout -rwxr-xr-x 1 g906016 g906016 0 2016年12月29日.dir_colors drwxr-x --- 3 g906016 g906016 4096 2016
shailesh Chanderiya
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.