删除仅包含旧文件的 Linux 目录

删除仅包含旧文件的 Linux 目录

我们有许多目录,每个目录包含 2 个文件,其中一个是隐藏文件。我们希望删除所有仅包含修改日期超过 180 天的文件的目录及其内容。例如,如果我们有以下内容:

Dir1   Jan 1 2000
     File1A   Jan 1 2000
     File1B   Jan 1 2000
Dir2   Jan 1 2000
     File2A   Jan 1 2014
     File2B   Jan 1 2014
Dir3   Jan 1 2000
     File3A   Jan 1 2014
     File3B   Jan 1 2000

我需要一个 Linux 命令来仅删除 Dir1 及其所有内容(包括隐藏文件)。 Dir2 和 Dir 3 将保持不变,因为每个文件都至少包含一个比 180 天前更新的文件。

我尝试过列出那些包含较新文件的目录,但找不到可以删除所有“其他”目录的“反向”命令​​。

答案1

使用 GNU 工具:

for d in Dir*; do
  find "$d" -mindepth 1 -mtime -180 -print -quit | grep -q . ||
    echo rm -rf "$d"
done

满意后删除echo。删除-q来找出目录未被删除的原因。

答案2

其中一种方法是:

while read -r line; do rm -rf "${line%%/*}"; done < <(find . -type f -mtime +180 -printf "%P\n")

通过管道输入read并相应地执行命令。

相关内容