如何find隐藏的文件

我有一些文件,他们是这样命名的

.abc efg.txt .some other name has a dot in front.txt ...... 

我想做这样的事情

 for i in `ls -a` ; do echo $i; done; 

我预计结果应该是

 .abc efg.txt .some other name has a dot in front.txt 

但事实certificate一团糟……我怎么能得到这些隐藏的文件?

谢谢

而不是使用ls使用shell模式匹配:

 for i in .* ; do echo $i; done; 

如果你想要所有的文件,隐藏和正常的做:

 for i in * .* ; do echo $i; done; 

(注意,这样做也会帮助你,如果你不想要那些你必须过滤出来的东西,还要注意,如果没有(隐藏的)文件,这种方法就会失败,在这种情况下,你也必须过滤*.*

如果你想要所有的文件,不介意使用bash特定的选项,你可以通过设置dotglobnullglob来优化。 dotglob会使*也找到隐藏的文件(但不是... ),如果没有匹配的文件, nullglob将不会返回* 。 所以在这种情况下,你不必做任何过滤:

 shopt -s dotglob nullglob for i in * ; do echo $i; done; 

避免...你可以这样做:

 find . -name ".*" -type f -maxdepth 1 -exec basename {} ";" 

这将打印你想要的。 如果你需要做更多的事情而不是echo ,那就把它作为exec的参数。

for fname in .*; do echo $fname; done; 将打印. 还有..

要查找隐藏的文件,请使用find:

 find . -wholename "./\.*" 

从结果中排除他们:

 find . -wholename "./\.*" -prune -o -print 

另一种用空格处理整个文件的方法是把它们当作行:

 ls -1a | while read aFileName do echo $aFileName done