示例用于检索目录中的数字文件的Bash脚本或命令

时间:2011-04-26 23:49:48

标签: linux shell

目录

中的文件数有问题

我用

$(ls /test -l | grep '^-' | wc -l)

但这样我只检索同一路径中的文件数,但不检索子目录中的文件数  如果我有

  /test/1
  /test/1/2
  /test/1/3
  /test/1/4/1
  /test/1/4/2
  /test/1/5

我的问题是如何检索/ test中的文件数量? 谢谢你的建议。

4 个答案:

答案 0 :(得分:5)

试试这个

targetDir=/test
find ${targetDir} -type f | wc -l

我希望这会有所帮助。

答案 1 :(得分:2)

$(ls -lR /test | grep '^-' | wc -l)

最好使用find

$(find /test -type f | wc -l)

答案 2 :(得分:1)

标准方法是使用find

find /test -type f | wc -l

其他方法包括使用shell(例如bash 4)

shopt -s globstar
shopt -s dotglob
declare -i count=0
for file in **
do
  if [ -f "$file" ];then
     ((count++))
  fi
done
echo "total files: $count"

或编程语言,例如Perl / Python或Ruby

ruby -e 'a=Dir["**/*"].select{|x|File.file?(x)};puts a.size'

答案 3 :(得分:1)

使用wc -l是最简单的方法,但如果您想要准确计算文件 ,那就更复杂了:

count_files()
{
    local file_count=0
    while IFS= read -r -d '' -u 9
    do
        let file_count=$file_count+1
    done 9< <( find "$@" -type f -print0 )
    printf %d $file_count
}

作为奖励,您可以使用它同时计入多个目录。

测试它:

test_dir="$(mktemp -d)"
touch "${test_dir}/abc"
touch "${test_dir}/foo
bar
baz"
count_files "$test_dir"