Bash 如何让此脚本在不使用find的情况下删除当前目录和子目录中的零长度文件?

Bash 如何让此脚本在不使用find的情况下删除当前目录和子目录中的零长度文件?,bash,Bash,我希望我的脚本删除显示为参数的目录中的所有零长度文件以及子目录中的所有零长度文件 我编写了一个脚本,可以删除当前目录中的所有零长度文件。我需要它能够进入子目录和删除这些零长度的文件太 我能做些什么来解决这个问题 DIR=$1 TRAV= touch -c "$DIR"/* for d in ./$(DIR)/*; do if [ -f "${d}" ] && [ -s "${d}" ]; then echo "$d has so

我希望我的脚本删除显示为参数的目录中的所有零长度文件以及子目录中的所有零长度文件

我编写了一个脚本,可以删除当前目录中的所有零长度文件。我需要它能够进入子目录和删除这些零长度的文件太

我能做些什么来解决这个问题


DIR=$1
TRAV= touch -c "$DIR"/*

for d in ./$(DIR)/*; do
        if [ -f "${d}" ] && [ -s "${d}" ]; then
                echo "$d has some data"
        else
                echo "$d has no data, we're deleting it."
                rm -d -R ${d}
        fi
done
~~~~


到目前为止,该程序运行良好,只是没有删除指定目录子目录中的零长度文件。

将shopt-s globstar添加到脚本中以启用globstar,更改第四行

然后将目录作为参数运行脚本

为什么不使用“查找”? 如果不使用“find”,可以使用递归调用和ls命令

#!/bin/bash
function del(){
    local dir=$1
    cd ${dir}
    for f in $(ls -1)
    do
        if [ -d "${f}" ]; then
            (del ${f})
        else
            if [ ! -s ${f} ]; then
                rm -f ${f}
            fi
        fi
    done
}
del . 

您正在寻找
globstar
先生,您可能不知道,但您刚刚挽救了这一天。公平地说,我知道了。很多次,直到现在,我才意识到这种工具的存在。我的教授禁止使用“查找”,而且有很好的理由,这实际上是有帮助的。如果这个答案对你有帮助,我会很高兴你按下“这个答案很有用”按钮。不,这个答案对我没有帮助,我指的是我的教授提出的挑战,要求我在不使用find的情况下写作。
for d in ./$(DIR)/**/*; do 
#!/bin/bash
function del(){
    local dir=$1
    cd ${dir}
    for f in $(ls -1)
    do
        if [ -d "${f}" ]; then
            (del ${f})
        else
            if [ ! -s ${f} ]; then
                rm -f ${f}
            fi
        fi
    done
}
del .