如何按UNIX中修改的时间戳对文件排序,以便Shellscript一次选择一个文件

时间:2019-04-18 12:26:40

标签: shell unix

我正在编写一个Shell脚本,该脚本一次选择一个文件并对其进行处理。 我希望脚本按修改时间的升序选择文件。

我使用下面的代码来选择具有特定文件名模式的.csv文件。

for file in /filepath/file*.csv
do
  #mystuff
done

但是我希望脚本根据其修改时间的升序选择.csv文件。请提出建议。

预先感谢

3 个答案:

答案 0 :(得分:1)

如果您确定文件名不包含任何“奇怪”字符,例如换行符,您可以使用ls的排序功能,并通过while read...循环读取输出。这也适用于包含空格的文件名。

ls -tr1 /filepath/file*.csv | while read -r file
do
    mystuff "$file"
done

请注意,此解决方案应优先于类似的解决方案
for file in $(ls -tr /filepath/file*.csv) ...
因为如果文件名包含空格,由于此处涉及单词拆分,这将失败。

答案 1 :(得分:0)

将循环设为“ for”

for file in "`ls -tr /filepath/file*.csv`"
do
  mystuff $file 
done

答案 2 :(得分:0)

您可以将ls -t的结果作为数组返回。 (-t按修改的时间排序)

csvs=($(ls -t /filepath/file*.csv))

然后应用您的for循环。

for file in $csvs
do
  #mystuff
done