如何在目录中搜索文件,按大小排序,然后将最大的文件复制到另一个目录中。
我已经看到了点点滴滴..还没有解决它。
我试过下面的代码。但是,它不起作用。
find sourceDirectory -type f -exec ls -s {} \; | sort -n -r | head -1 | cp {} targetdirectory
花括号符号 ( {}
) 用于 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 字符,则可能需要特别注意。
你快到了。只是需要额外的支持awk
和xargs
尽管在这种情况下它们都可以正常工作,但我更喜欢使用du
代替。ls -s
find <sourceDirectory> -type f -exec du {} \; | sort -nr | head -1 | awk '{print $2}' | xargs -I file cp file <targetdirectory>