打乱一个文件 shuf

$ shuf --help
用法: shuf [选项]... [文件]
 或者:  shuf -e [选项]... [参数]...
 或者:  shuf -i LO-HI [选项]...
把输入行按随机顺序输出到标准输出。

长选项必须使用的参数对于短选项时也是必需使用的。
  -e, --echo            将每个参数视为输入行
  -i, --input-range=LO-HI   将LO 到HI 的每个数字视为输入行
  -n, --head-count=行数       最多输出指定的行数
  -o, --output=文件       将结果输出到指定文件而非标准输出
      --random-source=文件    从指定文件获得随机比特
  -z, --zero-terminated 以0 结束行而非新行
      --help        显示此帮助信息并退出
      --version     显示版本信息并退出

如果没有指定文件,或者文件为"-",则从标准输入读取。

 

转载于:https://www.cnblogs.com/pengwang52/p/7493756.html

### 如何按比例删除文件夹内的文件 为了实现按照一定比例删除文件夹内文件的需求,可以通过编写 Shell 脚本来完成这一任务。下面是一个基于 Linux 系统的解决方案。 #### 方案概述 该方案通过计算待处理目录下所有符合条件文件的数量,并根据设定的比例来决定实际应删除多少个文件。之后随机选取这些文件并将其移除。 #### 实现方法 ```bash #!/bin/bash # 定义变量 directory="/path/to/your/folder" percentage=20 # 设定想要保留下来的百分比(这里是80%,所以设置成20%被删掉) file_type="*.log" # 只针对特定类型的日志文件进行清理 # 获取总文件数 total_files=$(find "${directory}" -maxdepth 1 -type f -name "${file_type}" | wc -l) if [ ${total_files} -eq 0 ];then echo "No files found." else delete_count=$(( (${total_files}*${percentage})/100 )) # 计算需删除的数量 if [ ${delete_count} -gt 0 ]; then # 将所有匹配项放入数组中 mapfile -t all_files < <(find "${directory}" -maxdepth 1 -type f -name "${file_type}") # 随机打乱顺序 shuffled_files=( $(shuf <<<"${all_files[*]}") ) # 开始逐个删除直到达到预定数目为止 count=0 for file in "${shuffled_files[@]}" do rm -- "$file"[^3] ((count++)) if [ $count -ge ${delete_count} ] then break; fi echo "Deleted: $file" done echo "Total deleted: ${count}" else echo "Nothing to be removed as per given percentage." fi fi ``` 此脚本首先定义了一些必要的参数,比如目标路径、希望保持的数据占比以及关注的目标文件类型。接着统计出总的条目数量,并据此推导出应该去除的对象数目。最后利用 `shuf` 工具对候选集进行了混洗以确保每次运行的结果都具有一定的随机性,从而避免总是挑选相同的项目作为牺牲品。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值