【问题标题】:How do i find the largest file, by size, then copy to another directory如何按大小找到最大的文件,然后复制到另一个目录
【发布时间】:2013-10-31 11:16:41
【问题描述】:

如何在目录中搜索文件,按大小排序,然后将最大的文件复制到另一个目录。
我已经看到了点点滴滴..还没有解决它。
我试过下面的代码。但是,它不起作用。

find sourceDirectory -type f -exec ls -s {} \; | sort -n -r | head -1 | cp {} targetdirectory 

【问题讨论】:

    标签: file copy find


    【解决方案1】:

    花括号符号 ({}) 用于 find-exec 选项的参数中,在这种情况下它对 cp 没有意义。您需要将其拆分为两个单独的步骤,1) 查找文件,以及 2) 复制文件。

    如果您使用的是 GNU find,我建议您这样做:

    read size filepath < <(find . -type f -printf '%k %p\n' | sort -nr)
    cp "$filepath" target/path/
    

    这是避免临时变量的替代方法:

    cp "$(find . -type f -printf '%k %p\n' | sort -nr | head -n1 | cut -d' ' -f2-)" target/path/
    

    你可以替换 -printf '%k %p\n' by-exec ls -s {} \;` 但 printf 效率更高。

    请注意,如果文件名包含非 ASCII 字符,则可能需要特别注意。

    【讨论】:

    • 大括号 () 是否足以让 unix 知道从哪里复制?
    • @user2941090:找到最大的文件就足够了,是的,但是您不能从-exec 运行复制命令。请参阅我的编辑以了解避免临时变量的替代方法。
    • 恐怕代码运气不佳...它不喜欢'
    • @user2941090:小于字符应该用空格分隔。您是否测试过替代选项?
    【解决方案2】:

    你快到了。只是需要awkxargs的额外支持

    我更喜欢使用du 代替ls -s,尽管在这种情况下它们都可以正常工作。

    find <sourceDirectory> -type f -exec du {} \; | sort -nr | head -1 | awk '{print $2}' | xargs -I file cp file <targetdirectory>
    

    【讨论】:

    • 恐怕我的代码运气不太好......不喜欢 head/awk 或排序......它可能是 '\' 。是否放置正确?
    • @user2941090 ohh `\` 只是换行符,我把它放在使命令更可见。如果您不喜欢换行符,请参阅我的编辑。为我工作文件
    猜你喜欢
    • 1970-01-01
    • 2016-06-14
    • 2012-02-13
    • 2019-06-09
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    • 2012-03-24
    相关资源
    最近更新 更多