递归地将所有文件移动到保持最大的一个文件夹

时间:2013-06-17 15:06:52

标签: macos bash terminal

我有一个需要合并的大图像文件夹,我使用以下内容完成了第一步:

find ./products_raw -type f -exec cp {} products_processed  \;

然而,他们来自的文件夹结构还包括相同名称的缩略图,因此运气不错,大小的图像最终会出现在文件夹中。我的逻辑是,如果我可以检查文件是否更大,那么它可能是正确的。不确定如何实现这一点,通常的搜索没有显示任何太清楚。

干杯!

编辑:应该提到,我正在使用OSX

2 个答案:

答案 0 :(得分:2)

嗯,答案很简单。

首先,您将获得包含其大小的文件列表:

find . -type f -printf '%s\t%f\t%p\n'

将有3列:大小,文件名,文件路径(带名称)。

然后按大小排序,以便更早地制作更大的文件:

find . -type f -printf '%s\t%f\t%p\n' | sort -nr

然后,您通过awk传递它以删除重复的文件名:

find . -type f -printf '%s\t%f\t%p\n' | \
    sort -nr | \
    awk -F'\t' '!c[$2]++ {print $3}'

最后,将文件复制到目标目录:

find . -type f -printf '%s\t%f\t%p\n' | \
    sort -nr | \
    awk -F'\t' '!c[$2]++ {print $3}' | \
    xargs -d'\n' cp -t wherever/

答案 1 :(得分:0)

您可以对-size命令使用find测试,例如找到大于1 MB的所有文件:

find ./products_raw -type f -size +1M -exec cp {} products_processed \;