从列表中找到最旧的文件

时间:2014-04-14 09:08:44

标签: bash sorting

我有一个文件,其中包含不同目录中的文件列表,并希望找到最旧的文件。 感觉就像一些shell脚本应该很容易,但我不知道如何处理它。我确信它在perl和其他脚本语言中非常容易,但我真的很想知道我是否错过了一些明显的bash解决方案。

源文件的内容示例:

/home/user2/file1  
/home/user14/tmp/file3  
/home/user9/documents/file9

3 个答案:

答案 0 :(得分:3)

#!/bin/sh

while IFS= read -r file; do
    [ "${file}" -ot "${oldest=$file}" ] && oldest=${file}
done < filelist.txt

echo "the oldest file is '${oldest}'"

答案 1 :(得分:2)

您可以使用stat查找每个文件的上次修改时间,循环显示源文件:

oldest=5555555555
while read file; do
    modtime=$(stat -c %Y "$file")
    [[ $modtime -lt $oldest ]] && oldest=$modtime && oldestf="$file"
done < sourcefile.txt
echo "Oldest file: $oldestf"

这使用%Y格式stat,这是最后修改时间。您还可以将%X用于上次访问时间,或%Z用于上次更改时间。

答案 2 :(得分:1)

使用find()查找最旧的文件:

find /home/ -type f -printf '%T+ %p\n' | sort | head -1 | cut -d' ' -f2-

使用源文件:

find $(cat /path/to/source/file) -type f -printf '%T+ %p\n' | sort | head -1 | cut -d' ' -f2-