如何将随机文件复制到目录

如何将随机文件复制到目录

首先,这不是作业。我只是不想翻阅一堆手册并学习从 AZ 编写 shell 程序来完成这一件事。

我有一个/mnt/hdd/files包含很多子文件夹的文件夹,我在其中存储文件,并且想随机选择和复制文件/mnt/hdd/temp/1

有没有办法选择并复制文件,直到文件夹/mnt/hdd/temp/1达到给定大小? (如 5 或 10GB)

平均文件大小约为 10 MB,因此告诉命令(脚本/批处理?)随机选择的文件数量 (1000) 就很酷了。

目录树中没有重复项并且只有一种文件类型。

答案1

一种方法是假设文件名没有嵌入换行符:

#! /bin/sh
dest=/mnt/hdd/temp/1
cd /mnt/hdd/files
find . -type f | \
    shuf -n 1000 | \
    while [ $(du -ks "$dest" | awk '{ print $1 }') -lt 10485760 ] && IFS= read -r fn; do
        cp "$fn" "$dest"
    done

只要目标大小小于 10 GB,但不超过 1000 个文件,这将从/mnt/hdd/files到复制随机文件。/mnt/hdd/temp/1du

相关内容