[英]Finding the oldest folder in a directory in linux even when files inside are modified
我有两个文件夹 A 和 B,里面各有两个文件。 按以下顺序创建
mkdir A
cd A
touch a_1
touch a_2
cd ..
mkdir B
cd B
touch b_1
touch b_2
cd ..
从上面我需要找到首先创建的文件夹(未修改)。
ls -c <path_to_root_before_A_and_B> | tail -1
现在这个输出为“A”(这里没有问题)。 现在我删除目录 A 中的文件 a_1。现在我再次执行命令
ls -c <path_to_root_before_A_and_B> | tail -1
这次它显示“B”。
但是目录 A 包含文件 a_2,但ls
命令显示为“B”。 如何克服这个
您需要阅读上面的链接,文件和目录将保存相同的修改时间类型,这意味着目录不会保存它们的创建日期。 像前面提到的ls -i
这样的方法有时可能会起作用,但是当我刚刚运行它时,它会将真正的旧文件与真正的新文件混合在一起,所以我认为它的工作方式与您想象的完全不一样。
而是在创建目录后立即尝试触摸文件,将其保存为.DIRBIRTH
之类的文件并将其隐藏。 然后,当尝试查找目录的创建顺序时,只有 grep .DIRBIRTH
具有最早的修改日期。
假设所有星星都对齐(您使用的是支持文件诞生时间格式的GNU stat(1)
版本,您使用的是记录它们的文件系统,以及 linux kernel 版本足够新以支持statx(2)
系统调用,此脚本应打印出作为其参数传递的目录的所有直接子目录,并按创建时间排序:
#!/bin/sh
rootdir=$1
find "$rootdir" -maxdepth 1 -type d -exec stat -c "%W %n" {} + | tail -n +2 \
| sort -k1,1n | cut --complement -d' ' -f1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.