如何找到隐藏文件

时间:2010-12-19 09:17:36

标签: linux bash shell hidden-files

我有一些文件,它们的名字是这样的

.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

但结果却是一团乱糟糟的...... 我怎么能得到那些隐藏文件???

感谢

3 个答案:

答案 0 :(得分:4)

而不是使用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;

答案 1 :(得分:2)

要避免...,您可以这样做:

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

这将打印您想要的内容。如果您需要执行超过echo的操作,请将其作为exec的参数。

for fname in .*; do echo $fname; done;也会打印...

答案 2 :(得分:1)

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

find . -wholename "./\.*"

要从结果中排除它们:

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

使用空格处理整个文件的另一种方法是将它们视为行:

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