2010-12-19 119 views
3

我有一些文件,这些文件被命名为喜欢这个如何找到隐藏文件

.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 

但事实证明一堆烂摊子.. 我怎么能得到那些隐藏的文件?

感谢

+0

'for i in $(ls -a);做echo $ i;完成' - >'ls -a1' – twalberg 2014-05-20 12:46:56

回答

4

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

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

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

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

(注意,这将ALS GET你...,如果你不想要那些你不得不将这些过滤掉,也请注意,如果没有(隐藏)文件,在这种情况下,你会还必须过滤掉*.*

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

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

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

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

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

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

+0

将maxdepth放在该位置会使find发出警告。 – Brian 2015-11-03 15:19:52

1

要找到隐藏的文件使用发现:

find . -wholename "./\.*" 

从结果中排除:

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

而另一种方式来处理与空间的整个文件是把它们看作线:

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