Bash脚本用于标识目录中的空项

时间:2018-04-23 23:33:18

标签: bash

我试图编写一个bash脚本来识别目录中的空文件。为了便于使用,我计划将其保存到主目录并从那里运行它。请注意,它不是递归的。试图避免使用find命令,因为它可能会变得混乱。如果你有一个比测试更好的建议,我会全力以赴。

我会说我是bash脚本的新手,并且通常会在Python中执行此操作,但我希望保持与我们在此处所做的事情保持一致。

输出应该是任何空文件和计数器的列表。下面是我到目前为止所做的,但我并没有返回空文件,尽管在"测试" 。目录

fileCount=0
for item in *; do
if test -f "$item" && ! test -s "$item"
then
    fileCount=$((fileCount+1))
    echo $item
else
    continue
    fi 
done

echo "Number of empty files: " $fileCount

如果我想修改它以获取参数(用户指定的目录),我该怎么做呢?以下是我对其进行修改的方法,但我认为我的变量存在问题。

 fileCount=0
 echo "Please enter a directory: " 
 read directory

 for item in $directory; do
 if test -f "$item" && ! test -s "$item"
 then
     fileCount=$((fileCount+1))
     echo $item
 else
     continue
     fi 
 done

 echo "Number of empty files: " $fileCount

3 个答案:

答案 0 :(得分:3)

break结束循环,因此您在第一个非空文件处停止计数。你想要continue,它进入循环的下一次迭代。

或者你可以写:

if test -f "$item" && ! test -s "$item"
then
    fileCount=$((fileCount+1))
fi

答案 1 :(得分:2)

实际上,find非常简单。

find . -type f -size 0为您提供当前目录中的所有空文件。

find . -type f -size 0 | wc -l为您提供空文件的数量。

即使使用隐藏文件也可以。

如果您只想在当前目录中列出空文件,只需添加-maxdepth 1选项即可查找。

答案 2 :(得分:1)

find PATH_TO_SEARCH -maxdepth -type f -empty | nl

示例:

find proj/mini/forum -maxdepth 1 -type f -empty | nl
     1  proj/mini/forum/resolv
     2  proj/mini/forum/five
     3  proj/mini/forum/0
     4  proj/mini/forum/FactorialComplexit.java
     5  proj/mini/forum/-temp.html
     6  proj/mini/forum/index.-temp.html

我看不出任何凌乱。因为在几乎所有情况下,文件名不会跨越多行,而我不得不承认它是可能的,nl似乎是一个足够好的工具来测量满足的空文件数。