我有一些文件,他们是这样命名的
.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
特定的选项,你可以通过设置dotglob
和nullglob
来优化。 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