我有一个文件,其中包含不同目录中的文件列表,并希望找到最旧的文件。 感觉就像一些shell脚本应该很容易,但我不知道如何处理它。我确信它在perl和其他脚本语言中非常容易,但我真的很想知道我是否错过了一些明显的bash解决方案。
源文件的内容示例:
/home/user2/file1
/home/user14/tmp/file3
/home/user9/documents/file9
答案 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-