0

首先,请原谅我的英语很差。

我试图写一个shell脚本来清理我的备份文件夹中的某些类型的文件。

我需要删除某些类型的文件,除了每个文件夹中最新的10个。

文件夹结构是这样的:

根文件夹│├──folder_1│├──file_1.txt│└──file_2.txt│└──file_n.txt│├──folder_2│├──file_1.txt│└──file_2.txt│└──file_n.txt│├──folder_n│├──file_1.txt│└──file_2.txt│└──file_n.txt│

我用过脚本大卫·福斯特把作为一个基础,但不知道如何使它在不同的文件夹单独工作,而不手动写入脚本中的每个文件夹名称。

目前,脚本看起来像这样:

找到/ volume1 rootfolder /类型f - name * . txt printf的% T@ % p \ 0 |——字符串作为反向排序——数值排序字段分隔符=“-键1,1 |呆呆- f ' ' - v RS = ' \ 0的口服补液盐- v = ' \ 0 ' - v retain_count = 10 \ '开始{maxage = systime()——retain_younger_days * 24 * 3600;} (NR > retain_count) & & (int(1美元)< maxage){打印(substr(0美元,长度(1美元)+ 2));}' | xargs -r0——rm——

但问题是它会删除所有文件夹中的所有文件,除了最新的10个。所以,总的来说,我在所有文件夹中只有10个文件,而不是每个文件夹中有10个。

请,帮我弄清楚,如何使脚本处理每个文件夹分开。

新的因素
Nazar Tareyev是这个网站的新贡献者。在要求澄清、评论和回答时要小心。看看我们的行为准则
1
1

你把它分成两部分。首先,构建一个目录结构,在本例中,我们只需要包含文件的目录。在第二部分中,我们首先对最新的文件进行排序,然后跳过那些尾巴

#!/bin/bash while IFS= read -rd ";do find "$REPLY" \ -maxdepth 1 -type f -name '*.txt' -printf '% t @\t%P\0' | sort -zk1rn | cut -zf2- | tail -zn +$((10+1)) | xargs -0 echo rm done < <(\ find $PWD/data \ -mindepth 2- type f -printf %h\ 0 | sort -zu \)

    你的答案

    Nazar Tareyev是一个新的贡献者。友好点,看看我们的的行为准则

    点击“发布你的答案”,表示你同意我们的服务条款隐私政策饼干的政策

    这不是你想要的答案?浏览其他标记的问题问你自己的问题