【发布时间】:2014-09-09 13:57:11
【问题描述】:
我有一个复杂的目录结构,有很多目录,每个目录有很多子目录,每个子目录又有很多子目录和文件。
我想要一个包含在过去 24 小时内编辑过的文件的顶级目录列表。
我使用find . -mtime -1 -ls 列出了所有已编辑的文件,但我只对它们所在的顶级目录感兴趣,而不是文件本身。
【问题讨论】:
我有一个复杂的目录结构,有很多目录,每个目录有很多子目录,每个子目录又有很多子目录和文件。
我想要一个包含在过去 24 小时内编辑过的文件的顶级目录列表。
我使用find . -mtime -1 -ls 列出了所有已编辑的文件,但我只对它们所在的顶级目录感兴趣,而不是文件本身。
【问题讨论】:
你可以拥有:
find . -mindepth 2 -mtime -1 | awk -F/ '!a[$2]++ { print $2 }'
具体检查文件(不是目录):
find . -mindepth 2 -type f -mtime -1 | awk -F/ '!a[$2]++ { print $2 }'
【讨论】:
awk 解决方案,因为与我的解决方案相比,它节省了两个额外的过程。你速度更快! :)
以下管道可以:
find -mindepth 2 -mtime -1 | sed 's#\./\([^/]*\).*#\1#' | sort | uniq
请注意,我使用-mindepth 2 来防止 find 返回已更改但位于当前文件夹而非子文件夹中的文件。
【讨论】:
find . -type f -mtime +1 -exec dirname {} \;
【讨论】: