【问题标题】:How do I loop through directories(including hidden) in bash without 'find' command?如何在没有'find'命令的情况下在bash中循环目录(包括隐藏)?
【发布时间】:2017-01-09 18:57:03
【问题描述】:

我的初始代码是:

function recurse {
 for i in "$1"/*;do
    echo "$i"
    if [ -d "$i" ];then
      #echo $i
        count $i
        recurse "$i"
    fi
 done
}

但后来我意识到这不会遍历隐藏目录。我想做的是制作一个脚本来计算给定目录(包括隐藏)中的所有文件和目录。我这样做的功能是:

function count {
  varname=($1/*)
  for varname2 in ${varname[@]}  # For each element
    do
        if [ -d $varname2 ] # Checks if directory
        then
                Directories=$(expr $Directories + 1)
        elif [ -f $varname2 ] # Checks if file
        then 
                Files=$(expr $Files + 1)
    fi
    done

  for a in $(ls -FA $1 | egrep '^[.].*[/]$') # Checks for hidden dirs
  do
   HiddenDirectories=$(expr $HiddenDirectories + 1)
  done

  for a in $(ls -FA $1 | egrep '^[.].*[^/]$') # Checks for hidden files
  do
   HiddenFiles=$(expr $HiddenFiles + 1)
  done
}

谢谢

【问题讨论】:

  • 出于好奇,使用 find 命令有什么问题?
  • 您使用的是哪个版本的bash?如果bash 4,使用globstar 选项会变得更容易:例如,for f in **/*; do 递归地命中当前目录下的每个文件。

标签: bash shell loops scripting


【解决方案1】:

我建议使用 bash:

shopt -s dotglob

来自man bash

dotglob:如果设置,bash 包含以 `.' 开头的文件名在路径名扩展的结果中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-21
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2016-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多