gpt4 book ai didi

bash - 删除除最后一场比赛以外的所有比赛

转载 作者:行者123 更新时间:2023-12-01 23:30:32 24 4
gpt4 key购买 nike

我想删除一组文件中除最后一个匹配项以外的所有匹配项,这些文件与目​​录中每个文件夹中的 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

关于bash - 删除除最后一场比赛以外的所有比赛,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66351693/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com