【问题标题】:Shell script to delete files smaller than xMB with condition使用条件删除小于 xMB 的文件的 Shell 脚本
【发布时间】:2017-12-25 10:22:27
【问题描述】:

如果文件夹中有多个小于 10MB 的文件,我正在尝试编写一个脚本来删除最小的文件,但我没有成功。

在我的尝试中

find . -type f -size -10M -exec rm {} +

删除所有小于 10 MB 的文件,如果文件夹内有 2 个小于 10 MB 的文件,我只需要删除最小的递归。

谁能帮帮我?

【问题讨论】:

    标签: linux bash shell scripting rm


    【解决方案1】:

    一个选项是循环通过find 的输出,然后跟踪文件的数量并跟踪最小的文件,所以最后你可以删除它:

    #!/bin/bash
    
    path=/path/to/dir # replace here with your path
    
    while read -d '' -r dir;do
    
        files_count=0
        unset min
        unset smallest_file
    
        while read -d '' -r file;do
    
                let files_count++
                min_size="$(du -b "${file}"|cut -f1)"
                min=${min:-"$min_size"}
                smallest_file=${smallest_file:-"$file"}
    
                if (( min_size < min ));then
                        min=$min_size
                        smallest_file=$file
                fi
    
        done < <(find "${dir}" -type f -size -10M -maxdepth 1 -print0)
    
        if (( files_count >= 2 ));then
    
                echo "$smallest_file"
                #rm -v "$smallest_file"
    
        fi
    
    done < <(find "${path}" -type d -print0)
    

    【讨论】:

    • 所以,不要在这里工作:find: 'smallest': No such file or directory 据我了解,它将删除所有这些中最小的。但如果此文件夹中有 >= 2 个大小小于 10MB 的文件,我只需要删除文件夹中最小的那个。
    • @YagoLima 对不起,那是我的测试目录,替换成你的目录路径,我编辑了代码。
    • 我的错,这里已经改了。但是,就像我说的,它只显示其中最小的一个。如果该文件夹中有 >= 2 个小于 10MB 的文件,我需要该文件夹中的最小文件。
    • @YagoLima 我想我现在理解你了。相同的脚本是否只是将所有内容包装在另一个遍历所有目录的 while 循环中,并为每个目录执行我们之前所做的操作。注意内部find 中的maxdepth 选项。
    猜你喜欢
    • 2015-03-03
    • 2022-07-11
    • 1970-01-01
    • 1970-01-01
    • 2017-11-21
    • 1970-01-01
    • 1970-01-01
    • 2012-06-27
    • 1970-01-01
    相关资源
    最近更新 更多