【问题标题】:how to find hidden file如何找到隐藏文件
【发布时间】:2010-12-19 09:17:35
【问题描述】:

我有一些文件,它们是这样命名的

.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

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

谢谢

【问题讨论】:

  • for i in $(ls -a); do echo $i; done -> ls -a1

标签: linux bash shell hidden-files


【解决方案1】:

不要使用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;

【讨论】:

    【解决方案2】:

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

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

    这将打印您想要的内容。如果您需要做的不仅仅是echo,只需将其作为exec 的参数即可。

    for fname in .*; do echo $fname; done; 也会打印出. 和..。

    【讨论】:

    • 将 maxdepth 放在该位置会使 find 发出警告。
    【解决方案3】:

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

    find . -wholename "./\.*"
    

    从结果中排除它们:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-17
      • 2023-04-03
      • 1970-01-01
      相关资源
      最近更新 更多