我正在编写一个 LRU 脚本,但在处理了 20 个小时后,我遇到了无法修复的递归模式问题。
我只需要一个命令来显示按访问时间排序的文件(--time=atime);我也想控制深度,但如果我做不到,也没关系。
- 主目录:
- 文件1
- 目录1:
- 文件1
- 文件2
- 子目录 1 :
- 文件1
- 文件2
- 目录2:
- 文件1
- 文件2
- 子目录 2 :
- 文件1
- 文件2
- 子目录 3 :
- 文件1
我想排除目录,只让文件按访问时间排序
喜欢
/主目录/目录1/文件1
/主目录/文件1
/主目录/目录1/子目录1/文件2
/主目录/目录 2/子目录 2/子目录 3/文件 1
ETC..
答案1
有六种非常常用的工具可以解决类似的问题:
find
,查找与特定条目匹配的文件或目录。-mindepth
和选项-maxdepth
控制命令在文件系统树中的深度(相对于指定的名称,其深度始终为 0)。该
-type
选项对于限制对文件、目录、符号链接或设备的考虑很有用。该
-printf
选项非常有用,因为它使命令以所需的格式打印出有关匹配名称(目录项)的信息。我特别喜欢%TY%Tm%Td %TT %p\n
,它使用 format 打印最后一次修改的日期和时间,以及每行上每个匹配的完整路径和名称YYYYMMDD HH:MM:SS.sss PATH
。您会看到,这种格式排序正确。对于最后一次访问,使用,但请注意,如果使用 mount 选项,则%AY%Am%Ad %AT %p\n
根本不会记录访问时间戳,或者如果使用 mount 选项,则仅在修改后第一次访问时才修改访问时间戳;因此,最近最少使用的检查并不可靠。 (然而,最近最少修改的列表是相当可靠的;用户可以手动修改时间戳,但否则它们会自动维护。)noatime
relatime
sort
对输出进行排序。、
-d
、、和选项定义如何比较项目,并且该-g
选项使顺序随机。-h
-M
-n
-R
该
-r
选项可用于反转排序顺序(除了上述选项之一之外使用)。该
-t
选项重新定义了字段(列)的定义方式;默认情况下,空格(空格和制表符)分隔列。该
-k
选项可用于定义每行的哪一部分被视为排序键;默认情况下,考虑整行。uniq
通常在排序后使用,将多个连续的项目合并为一个——以便仅输出唯一的行。cut
是从输出中的每一行中仅选择特定列的最简单方法。该
-f
选项选择要打印的字段。 (默认情况下,打印最多包含一个字段(无分隔符)的行;该选项-s
禁止打印此类行。)该
-d
选项可用于重新定义字段的定义;默认情况下,将单独的字段留空。awk
是 awk 语言的解释器。 awk 脚本基本上是以下集合行动,为每一行执行的代码片段(或者在所有处理之前或之后,或者如果该行(或记录)匹配某些规则)。
这个特殊问题可以在一个简单的管道中使用上述三个命令来解决:使用find
在树的所需深度查找文件,打印每个文件的可排序日期和时间,以及文件的相对路径;对输出进行排序;删除每行的日期和时间部分,仅保留每行上每个文件的相对路径。