2014-10-26 62 views
1

给定一个包含一些文件列表的文本文件,例如,在bash中按日期排序的文件列表

$ cat file_list.txt 
/var/x/file1.txt 
/var/y/file2.txt 
<etc> 

如何根据某些条件对文件列表进行排序 - 如上次访问时间或上次更改时间?

在此先感谢。

回答

3

可以使用stat命令sort这样的:

while read -r line; do 
    stat -c '%Y %n' "$line" 
done < file_list.txt | sort -n | cut -d ' ' -f2 
  • stat -c '%Y %n'名单去年修改的,因为时代秒后面加一个空格和文件名
  • sort -n各种时间戳和其文件名数字
  • cut -d ' ' -f2仅打印排序输出中的文件名
+1

在OSX(BSD)等效stat命令是'STAT -f '%M%N'“ $行“'。 – 2017-10-16 19:37:57

1

尝试一个衬里(通过修改时间):

ls -t $(cat file_list.txt) 

OR

ls -t `cat file_list.txt` 
+2

如果任何文件包含空格,这将失败。此外,这受到路径名称扩展的影响。为了“安全”:'(set -f; IFS = $'\ n'; ls -t $(cat file_list.txt))'。 – 2014-10-26 17:24:25

+0

@gniourf_gniourf谢谢,我同意。 – SMA 2014-10-26 17:25:36