Answers:
命令 :
ls -ld .?*
只列出隐藏文件。
说明:
-l use a long listing format
-d, --directory
list directory entries instead of contents, and do not derefer‐
ence symbolic links
.?* will only state hidden files
.
,并..
从比赛。但是,它也将排除(完全合法)单字符隐藏文件名,例如.a
,.1
等等。也许更好的扩展范围是.!(|.)
字面点,后面紧跟什么都没有或其他(单个)点,即ls -d .!(|.)
ls -d .!(|.)
确实OP正在寻找什么。
!(pattern-list)
,pattern-list
是一个由a分隔的一个或多个模式的列表|
,但是对我来说,您在的左侧没有任何模式感到困惑|
。你能给我解释一下这种语法吗?
.
没有跟在(nothing或.
)之后,不包括.
自身和..
。
使用find
和awk
,
find . -type f | awk -F"/" '$NF ~ /^\..*$/ {print $NF}'
说明:
find . -type f
->列出当前目录中的所有文件及其路径,例如
./foo.html
./bar.html
./.foo1
awk -F"/" '$NF ~ /^\..*$/ {print $NF}'
/
作为字段分隔符,awk检查是否有最后一个以点开头的字段。如果以点开头,则将打印该对应行的最后一个字段。
find -type f
。您无需明确设置搜索路径或-name "*"
。
find
对于复杂的搜索,通常比使用名称遍历更好。
find . -mindepth 1 -maxdepth 1 -name '.*'
要么
find . -mindepth 1 -maxdepth 1 -name '.*' -o -name '*~'
find .
搜索当前目录
-mindepth 1
不包括在内。和..从列表中
-maxdepth 1
将搜索限制到当前目录
-name '.*'
查找以点开头的文件名
-o
要么
-name '*~'
查找以波浪号结尾的文件名(通常是文本编辑程序的备份文件)
但是,此答案和所有其他答案都丢失了当前目录.hidden
文件中的文件。如果您正在编写脚本,那么这些行将读取.hidden
文件并显示现有文件的文件名。
if [[ -f .hidden]] # if '.hidden' exists and is a file
then
while read filename # read file name from line
do
if [[ -e "$filename" ]] # if the read file name exists
then
echo "$filename" # print it
fi
done < .hidden # read from .hidden file
fi
.hidden
文件 为什么会有一个名为.hidden
的文件包含文件名?无论如何,如果有一个人,当您只需要什么时,为什么还要做那么复杂的事情cat .hidden
呢?您的find
命令正确(ish),但-name '*~'
无关紧要。以波浪号结尾的文件是备份文件,但不以任何方式隐藏。
.hidden
文件用于当您无法将文件/文件夹名称更改为以点开头时要隐藏的文件和文件夹。至于以波浪号结尾的文件,取决于系统。ls -B
就像大多数GUI文件浏览器一样,将忽略此类文件。
cat .hidden
如果自添加到.hidden
文件后删除或移动了这些文件,则可能会显示不存在的文件。
我认为您可以使用以下命令来执行此操作。
ls -a | grep "^\." | grep -v "^\.$" | grep -v "^\..$"
ls -a
您输入的命令将显示当前工作目录中的所有文件和目录。
grep "^\."
我附加的命令,它过滤输出以仅显示隐藏文件(名称以开头"."
)。
grep -v "^\.$" | grep -v "^\..$"
我附加的命令,用于过滤输出以排除。,..(它们是当前目录和父目录)。
如果某些文件名可以包含多于一行"\n"
,则上面的示例可能是错误的。
因此,我建议使用以下命令来解决该问题。
find -maxdepth 1 -name ".[!.]*"
您还可以做些什么,is ls .?*
否则ls .!(|)
将向您显示当前目录中顶部隐藏的文件/目录以及下面其他文件/目录中的所有内容
例如:从我的终端
$ ls .?*
.bash_history .dmrc .macromedia .weather
.bash_logout .gksu.lock .profile .wgetrc
.bash_profile .bashrc.save .ICEauthority .toprc .Xauthority
.bashrc .lastdir .viminfo .xsession-errors
.bashrc~ .dircolors .lynxrc .vimrc .xsession-errors.old
..:
Baron
.adobe:
Flash_Player
.aptitude:
cache config
.cache:
compizconfig-1 rhythmbox
dconf shotwell
现在注意上面的结果,它显示了每个文件/目录及其子目录以及下面的任何隐藏文件。
[1:0:248][ebaron@37signals:pts/4][~/Desktop]
$ ls .!(|)
.bash_aliases .bashrc1 .bashrc1~
..:
askapache-bash-profile.txt examples.desktop Public top-1m.csv
backups Firefox_wallpaper.png PycharmProjects top-1m.csv.zip
Desktop java_error_in_PYCHARM_17581.log Shotwell Import Log.txt topsites.txt
Documents Music Templates Videos
Downloads Pictures texput.log vmware
对不起,我不能发表评论。在这里解释之间的区别ls .?*
和@ cioby23答案ls -d .[!.]* .??*
,为什么它是实际打印隐藏文件两次是因为从字面上你问两次.??*
,.?*
,.[!.]*
他们是同样的事情,所以添加任何他们具有不同的命令字符,将打印的两倍。
您还可以使用:
ls -d .[!.]* .??*
这将允许您显示普通的隐藏文件和以2或3点开头的隐藏文件,例如: ..hidden_file
到目前为止,所有答案都基于以下事实:名称以点开头的文件(或目录)被“隐藏”。我想出了另一种解决方案,该解决方案可能效率不高,但是该解决方案不假设任何有关隐藏文件名称的信息,因此避免..
在结果中列出(与当前接受的答案一样)。
完整的命令是:
ls -d $(echo -e "$(\ls)\n$(\ls -A)" | sort | uniq -u)
说明
这是两次列出所有文件(和目录),
echo -e "$(\ls)\n$(\ls -A)"
但只显示一次隐藏文件-A
。
然后,对列表进行排序| sort
,使常规(未隐藏)文件出现两次并彼此相邻。
然后,删除所有出现多次的行| uniq -u
,仅保留唯一的行。
最后,ls
再次使用列出所有带有用户自定义选项的文件,而不列出列表中目录的内容-d
。
编辑(限制):
正如muru指出的那样,如果存在带有诸如这样的名称的文件,则该解决方案将无法正常工作,escaped\ncharacter.txt
因为echo -e
它将文件名分成两行。如果有两个隐藏文件的名称几乎相同,除了一个特殊字符(例如.foo[tab].txt
和).foo[new-line].txt
,则它也不会按预期方式工作,因为这两个文件都将被打印,.foo?.txt
并会被删除。uniq -u
.
作为第一个字符处理时的错误。
..
,但我想知道它与包含特殊字符的文件名的配合效果如何。
echo -e
可解释的转义序列。另外:ls
不会破坏文件名,以使两个不同的文件名显示相同(例如,在某些版本ls
中将使用?
特殊字符,因此.foo\tbar
(\t
=> tab)和.foo\nbar
(\n
= = newline)都将显示为foo?bar
)。
使用bash,设置GLOBIGNORE
特殊的变量是一些非空值是足以令它忽略.
和..
扩大水珠时。从Bash文档:
所述
GLOBIGNORE
外壳变量可以用来限制该组匹配的图案的文件名。如果GLOBIGNORE
设置为,则与匹配模式之一匹配的每个匹配文件GLOBIGNORE
名将从匹配列表中删除。如果nocaseglob
设置了该选项,GLOBIGNORE
则不考虑大小写而执行与输入模式的匹配。设置时,文件名.
和..
始终被忽略GLOBIGNORE
,不为null。但是,设置GLOBIGNORE
为非null值会启用dotglob shell选项,因此所有其他以‘.
' 开头的文件名都将匹配。
如果将其设置为.:..
,则.
和..
都将被忽略。由于将其设置为任何非空也将获得此行为,因此我们不妨将其设置为.
所以:
GLOBIGNORE=.
ls -d .*
ls -ld .*
或ls -ald .*
将起作用的方法