我们有许多目录,每个目录包含 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
并相应地执行命令。