bash - 删除除最后一场比赛外的所有比赛
问题描述
我想删除file*
目录中每个文件夹中存在的一组匹配文件的最后一个匹配项之外的所有匹配项。
例如:
Folder 1
file
file_1-1
file_1-2
file_2-1
stuff.txt
stuff
Folder 2
file_1-1
file_1-2
file_1-3
file_2-1
file_2-2
stuff.txt
Folder 3
...
等等。在每个子文件夹中,我只想保留最后一个匹配的文件,所以这Folder 1
将是. 每个子文件夹中的文件数量通常不同。file_2-1
Folder 2
file_2-2
由于我有一个非常隐蔽的文件夹结构,我考虑过以find
某种方式使用该命令
find . -type f -name "file*" -delete_all_but_last_match
我知道如何删除所有匹配项,但不知道如何排除最后一个匹配项。
我还找到了以下代码:
https://askubuntu.com/questions/1139051/how-to-delete-all-but-x-last-items-from-find
但是当我将修改后的版本应用到测试文件夹时
find . -type f -name "file*" -print0 | head -zn-1 | xargs -0 rm -rf
在大多数情况下,它会删除所有匹配项,仅在某些情况下保留最后一个文件。所以它对我不起作用,大概是因为每个文件夹中的文件数量不同。
编辑:
这些文件夹不包含其他子文件夹,但它们通常位于几个子文件夹级别的末尾。因此,如果脚本也可以在上面的某些级别上执行,那将是一个好处。
解决方案
#!/bin/bash
shopt -s globstar
for dir in **/; do
files=("$dir"file*)
unset 'files[-1]'
rm "${files[@]}"
done
推荐阅读
- python - 安装 pygame python setup.py egg_info 时出错
- r - 使用重复的列值排列值
- flutter - 在 Flutter 中启用或禁用检测模拟位置
- .net - 如何使用 .NET 在工作站上验证 JWT
- alibaba-cloud - 来自守护进程的错误响应:没有这样的容器
- flutter - 在颤动的两个页面之间导航时出现黑屏
- excel - 行的交替颜色与前导列中的合并行 - Excel 2016
- wordpress - 未定义的索引:第一个基本示例中的 name_of_your_nonce_field
- python - python中奇怪的“数组索引太多”错误
- javascript - javascript Dynamics 365 在刷新之前无法保存我的字段