【问题标题】:Finding and sorting files by size in Unix在 Unix 中按大小查找和排序文件
【发布时间】:2020-07-13 12:37:03
【问题描述】:

我想在 shell 编程中创建一个函数,它获取 2 个参数,目录名和文件名,并执行以下操作:它从给定的目录名开始搜索文件名,然后进入所有子目录的目录名称以继续搜索。我希望输出是找到文件名的每个父目录,使用文件名大小排序。

非常感谢您的帮助,谢谢。

【问题讨论】:

    标签: unix search directory size


    【解决方案1】:

    不确定您要的是哪个 Unix,但对于 Linux 和可能常见的 Unix 系统:

    find <directory> -name "<filename>" -ls | sort -k 7 -n -r | awk '{print $NF}' | xargs -n 1 dirname
    
    • sort => 按文件大小排序(find 输出的第 7 列是文件大小)
    • awk => 打印文件名完整路径
    • dirname => 获取匹配文件的父目录

    例子:

    # Find parent directory of all types.h under /usr/include, sorted by file size in desc order
    
    $ find /usr/include/ -name "types.h" -ls | sort -k 7 -n -r | awk '{print $NF}' | xargs -n 1 dirname
    /usr/include/x86_64-linux-gnu/bits
    /usr/include/x86_64-linux-gnu/sys
    /usr/include/c++/7/parallel
    /usr/include/rpc
    /usr/include/linux/sched
    /usr/include/linux/iio
    /usr/include/linux
    /usr/include/asm-generic
    /usr/include/x86_64-linux-gnu/asm
    

    【讨论】:

    • 我稍微调整了一下,但无法正确排序,这就是我的代码的样子: find -type f -name |排序 -k 7 -n -r | awk -F/'{打印 $(NF-1)}'。它的排序不太正确,我希望使用 $NF 元素的大小进行排序,然后打印相应的 $(NF-1)。也许你可以帮助我。
    • 您要排序什么? NF-1 是时间戳的日期部分
    • 找到 /usr/include/ -name "types.h" -ls | awk '{打印 $(NF-1) " " $NF}' | sort -k 1 # 使用 sort -k 指定列
    猜你喜欢
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-05
    • 1970-01-01
    • 2016-04-01
    • 1970-01-01
    • 2017-10-19
    相关资源
    最近更新 更多