如何通过最大文件大小和计数文件递归排序?

时间:2011-02-02 03:52:56

标签: bash

我是bash编程的初学者。我想显示排序文件的头-n $ 1结果 按/ etc / *中的大小。问题是在最终搜索时,我必须知道已处理了多少目录和文件。

我撰写以下代码:

#!/bash/bin
let countF=0;   
let countD=0;
for file in $(du -sk /etc/* |sort +0n | head $1); do
 if [ -f  "file" ] then
   echo $file;
   let countF=countF+1;
else if [ -d  "file" ] then 
   let countD=countD+1;
fi
done
echo $countF
echo $countD

我在执行时遇到错误。如何使用find与du,因为我必须递归搜索?

4 个答案:

答案 0 :(得分:1)

#!/bin/bash      # directory and program reversed
let countF=0     # semicolon not needed (several more places)
let countD=0
while read -r file; do
    if [ -f  "$file" ]; then     # missing dollar sign and semicolon
        echo $file
        let countF=countF+1  # could also be: let countF++
    else if [ -d  "$file" ]; then     # missing dollar sign and semicolon
        let countD=countD+1
    fi
done < <(du -sk /etc/* |sort +0n | head $1)    # see below
echo $countF
echo $countD

将循环从for更改为while,可以在文件名包含空格的情况下正常工作。

我不确定你有什么类型的排序,但我会接受你的说法是正确的。

答案 1 :(得分:0)

  1. #!/bin/bash不是#!/bash/bin

  2. 我不知道sort的论点应该是什么。也许你的意思是sort -r -n

  3. 你对头部的使用是错误的。给头文件参数会导致它忽略它的标准输入,所以一般来说,将一些东西管道并给它一个文件参数是一个错误。除此之外,“$ 1”指的是剧本的第一个参数。您是否可能表示head -n 1,或者您是否尝试通过参数将可处理的行数配置为脚本:head -n"$1"

  4. if测试中,您没有引用循环变量:它应该是"$file",而不是"file"

  5. 不是bash解析器在乎,但你应该尝试缩进。

答案 2 :(得分:0)

红宝石(1.9 +)

#!/usr/bin/env ruby    

fc=0
dc=0
a=Dir["/etc/*"].inject([]) do |x,f|
    fc+=1 if File.file?(f)
    dc+=1 if File.directory?(f)
    x<<f
end
puts a.sort
puts "number of files: #{fc}"
puts "number of directories: #{dc}"

答案 3 :(得分:0)

#!/bin/bash      # directory and program reversed
let countF=0     # semicolon not needed (several more places)
let countD=0
while read -r file; do
    if [ -f  "$file" ]; then     # missing dollar sign and semicolon
        echo $file
        let countF=countF+1  # could also be: let countF++
    else if [ -d  "$file" ]; then     # missing dollar sign and semicolon
        let countD=countD+1
    fi
done < <(du -sk /etc/* |sort +0n | head $1)    # see below
echo $countF
echo $countD

我尝试使用/ etc / *而不是文件变量,但我没有看到结果。我们的想法是从目录和子目录按大小对所有文件进行排序,并显示排序的$ 1结果 文件的大小。在这个过程中,我必须知道有多少文件和目录包含目录所在的位置 我做了搜索。