-1

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

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

2 回答 2

0

花括号符号 ( {}) 用于 for-exec选项的参数中find,在这种情况下它没有任何意义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 字符,则可能需要特别注意。

于 2013-10-31T11:42:47.900 回答
0

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

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

find <sourceDirectory> -type f -exec du {} \; | sort -nr | head -1 | awk '{print $2}' | xargs -I file cp file <targetdirectory>
于 2013-10-31T11:26:31.227 回答