使用:
for eachfile in /mnt/thara/*
它还会遍历隐藏文件。我不需要隐藏文件。
答案1
bash 的正常行为是在使用 for 时不查看隐藏文件。但可以使用 shopt 命令更改此行为。
要启用扫描带有“*”的隐藏文件:
shopt -s dotglob
禁用扫描带有“*”的隐藏文件(默认行为)
shopt -u dotglob
所以尝试这样的脚本:
shopt -u dotglob
for eachfile in /mnt/thara/*
现在隐藏的文件必须消失。
答案2
其他方式是
for eachfile in /mnt/thara/[^.]*
答案3
我同意有关 shell 选项的评论dotglob
。如果未设置,则 for 循环的行为是预期的:
utente@computer:/tmp/test$ shopt | grep dotglob
dotglob off
令a
、b
、 、c
为普通文件;.hidden1
和.hidden2
隐藏文件:
utente@computer:/tmp/test$ touch a b c .hidden1 .hidden2
utente@computer:/tmp/test$ ls -al
totale 8
drwxrwxr-x 2 utente utente 4096 giu 10 18:28 .
drwxrwxrwt 13 root root 4096 giu 10 18:28 ..
-rw-rw-r-- 1 utente utente 0 giu 10 18:28 a
-rw-rw-r-- 1 utente utente 0 giu 10 18:28 b
-rw-rw-r-- 1 utente utente 0 giu 10 18:28 c
-rw-rw-r-- 1 utente utente 0 giu 10 18:28 .hidden1
-rw-rw-r-- 1 utente utente 0 giu 10 18:28 .hidden2
对于循环:
utente@computer:/tmp/test$ for eachfile in * ; do ls $eachfile ; done
a
b
c
另一种独立于 shell 选项的方法:让我们指示find
过滤掉其初始字符与点匹配的所有路径名.
:
utente@computer:/tmp/test$ find . \( ! -path '*/.*' \) -type f -exec ls {} \;
./c
./b
./a
也可以看看这个问题在 superuser.com 上
答案4
或者很简单..
ls -l | egrep -v "^\."
或迭代显示文件名的所有目录:
ls -R | egrep -v "^\."