我有一些文件,它们是这样命名的
.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
但结果是一团糟..我怎样才能得到那些隐藏文件???
谢谢
我有一些文件,它们是这样命名的
.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
但结果是一团糟..我怎样才能得到那些隐藏文件???
谢谢
而不是ls
使用 shell 模式匹配:
for i in .* ; do echo $i; done;
如果你想要所有文件,隐藏和正常做:
for i in * .* ; do echo $i; done;
(请注意,这也将得到您.
,并且..
,如果您不希望那些您必须过滤掉它们,还请注意,如果没有(隐藏)文件,此方法将失败,在这种情况下,您还必须过滤掉*
和.*
)
如果您想要所有文件并且不介意使用bash
特定选项,您可以通过设置dotglob
和nullglob
. dotglob
make*
也会找到隐藏文件(但不是.
and ..
),如果没有匹配的文件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