首先,这不是作业。我只是不想翻阅一堆手册并学习从 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/1
du