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

但结果是一团糟..我怎样才能得到那些隐藏文件???

谢谢

4

3 回答 3

4

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

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

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

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

(请注意,这也将得到您.,并且..,如果您不希望那些您必须过滤掉它们,还请注意,如果没有(隐藏)文件,此方法将失败,在这种情况下,您还必须过滤掉*.*)

如果您想要所有文件并且不介意使用bash特定选项,您可以通过设置dotglobnullglob. dotglobmake*也会找到隐藏文件(但不是.and ..),如果没有匹配的文件nullglob则不会返回。*因此,在这种情况下,您不必进行任何过滤:

shopt -s dotglob nullglob
for i in * ; do echo $i; done;
于 2010-12-19T09:27:49.667 回答
2

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

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

这将打印你想要的。如果您需要做的事情不止于此echo,只需将其作为exec.

for fname in .*; do echo $fname; done;将打印...以及。

于 2010-12-19T09:29:55.727 回答
1

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

find . -wholename "./\.*"

要将它们从结果中排除:

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

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

ls -1a | while read aFileName
do
  echo $aFileName
done
于 2014-05-20T12:41:08.610 回答