我有一些问题 - 我有一个包含目录的文件列表(在 .txt 文件中),即:/student/2012/my/Video/hello.php。我需要做的是获取该列表的最后编辑文件,但我不知道如何去做..
谢谢
你可以说:
ls -1tr $(cat filename.txt) | tail -1
为了从filename.txt
.
在这个答案中,我演示了 bash 中的快速排序算法。这是片段:
quicksort_files_by_mod_date() {
if ((!$#)); then
qs_ret=()
return
fi
# the return array is qs_ret
local first=$1
shift
local newers=()
local olders=()
qs_ret=()
for i in "$@"; do
if [[ $i -nt $first ]]; then
newers+=( "$i" )
else
olders+=( "$i" )
fi
done
quicksort_files_by_mod_date "${newers[@]}"
newers=( "${qs_ret[@]}" )
quicksort_files_by_mod_date "${olders[@]}"
olders=( "${qs_ret[@]}" )
qs_ret=( "${newers[@]}" "$first" "${olders[@]}" )
}
然后,您可以将文件的内容 slurp 到一个数组中,并使用此函数获取一个qs_ret
包含排序文件名的数组,然后您将打印第一个:
mapfile -t array < files.txt
quicksort_files_by_mod_date "${array[@]}"
echo "${qs_ret[0]}"
:)
评论。这都是 100% 的狂欢!(并使用一些 bashisms)。
评论。这也适用于包含空格的文件名!(但不是换行符,当然)。
评论。没有检查文件是否files.txt
存在!
当然,如果您只想要最新的,则不需要快速排序。应该这样做:
recent=
while IFS= read -r file; do
[[ $file -nt $recent ]] && recent=$file
done < files.txt
echo "$recent"
嘿,它仍然是 100% bash,并且不会因文件名包含空格而失败。