【问题标题】:Delete all files except the latest 10 in subdirectories删除子目录中除最新的 10 个文件外的所有文件
【发布时间】:2015-09-08 07:39:06
【问题描述】:

我有一些来自机器的备份文件,它们将备份存储在不同的文件夹中。此外,这些文件不是同时创建的(机器 1:每个星期日,机器 2:每个月的第一个星期一,等等)。

我需要在每个文件夹中保留最新的 10 个文件并删除所有其他文件。由于备份间隔不同,我不能只删除 x 天之前的所有文件。

文件夹结构如下:

./<SystemType>/<FQDN_Machine1>/backup_2015_09_08_02_00_00.zip
./<SystemType>/<FQDN_Machine2>/backup_2015_09_01_14_00_00.zip

【问题讨论】:

  • 提示:使用ls -t通过管道传送到headtail

标签: linux file find delete-file subdirectory


【解决方案1】:
IFS='
'
for i in dir/*; do
    ls -d1t $i/* | head -n-10
done | xargs rm

列出除最新十个之外的所有子目录,并通过xargs 发送到rm

【讨论】:

  • 好的...我是一个 linux noob :P 当我将它写入 bash 文件(“filename.sh”)并尝试运行时,它指出“查找:路径必须在表达式之前: %T@ %p\n"...
  • 啊,是的...我有点愚蠢,对此感到抱歉。但是当我执行 find 命令时,我也会得到不应该找到的最新文件。也许在每个子目录中找到最新的 10 个文件然后反转该命令会更容易...
  • 你确定吗? head -n-10 打印除最后十个以外的所有内容。
  • 已经有一段时间了,但我没有更进一步......首先我需要获取所有子目录,然后获取除每个子目录的最新 10 个之外的所有文件。我尝试使用带有变量的 bash(“find -type d”进入 VAR1 和“find $(VAR1) -type f | head -n -10”),但这并不成功...... :(
  • 哦,我完全误解了你的问题。我虽然你想总共保存十个文件。然后就容易一些了。
【解决方案2】:

这是我的解决方案:

#!/bin/bash

cat find ./ -type f | while IFS= read -r line
do
  find "$line" -type f | head -n -10 | while read file
  do
    rm -f "$file"
  done
done

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-03
  • 1970-01-01
  • 2018-01-05
  • 2019-11-21
  • 2017-11-17
  • 2010-10-26
相关资源
最近更新 更多