列出包含两个以上大小超过 x 的文件的文件夹 - 命令行

列出包含两个以上大小超过 x 的文件的文件夹 - 命令行

更好的是,如果它能找到包含两个以上文件(不包括某些类型的文件)的目录。

答案1

如果文件名中没有换行符,则以下命令将查找所有包含两个或更多大小超过 100k 的文件的目录:

find . -type f -size +100k | sed -r 's|/[^/]*$||' | sort | uniq -d

至于“排除某些类型的文件”,find有很多种选择。

如果安装了最新版本的sed,则可以扩展上述方法以处理恶意文件名。或者,如果有bash可用的版本 4,则使用:

declare -A a
find . -type f -size +100k -print0 | while IFS= read -r -d '' fname
do
    dir="$(dirname "$fname")"
    ((a["$dir"]++))
    [[ "${a["$dir"]}" -eq 2 ]] && echo "$dir"
done

答案2

我不太擅长 shell 脚本,但像这样的东西会打印出包含两个以上大小为 X 字节或更大的文件的目录

#!/bin/sh

for DIR in foo bar; do
    if [ `find $DIR -mindepth 1 -size +Xc | wc -l` -gt 2 ]; then
        echo $DIR
    fi
done

我不确定你的意思

查找包含两个以上文件(不包括某些类型的文件)的目录

但你可以使用以下方法排除包含特定字符串的文件-not -name 'foo'

答案3

这与@John1024 的答案相同,但它对于所有可能的路径名都是安全的,并且输出 shell 引用的名称。

find . -type f -size +100k -print0 | xargs -0 dirname -z | sort -z | uniq -d -z | xargs -0 ls -d --quoting-style=shell

我知道的唯一有帮助的改进是,如果有一个命令,它采用零终止行,shell 引用它们并用换行符打印它们,这样就可以使用,而不是滥用ls

相关内容