如何按大小找到最大的文件,然后复制到另一个目录

时间:2013-10-31 11:16:41

标签: file copy find

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

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

2 个答案:

答案 0 :(得分:0)

你快到了。只需要awkxargs

的额外支持

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

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

答案 1 :(得分:0)

大括号表示法({})用于-exec的{​​{1}}选项的参数,在此上下文中对find没有意义。您需要将其拆分为两个单独的步骤:1)找到文件,然后2)复制文件。

如果您使用的是GNU,我建议使用以下内容:

cp

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

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/ - exec ls -s {} \;`但是printf效率更高。

请注意,如果文件名包含非ASCII字符,则可能需要采取特殊预防措施。