如何使用shell脚本按名称对文件进行排序

时间:2012-12-22 09:50:06

标签: linux shell sorting

我想用Shell脚本按日期对所有文件进行排序。

例如,在/Users/KanZ/Desktop/Project/Test/中,有M1.hA2.hF4.h个文件。

每个文件都有不同的时间。如何按日期和时间将所有这些文件从最旧文件排序到当前文件?

目前我有一个重命名脚本:

cd /Users/KanZ/Desktop/Project/Test/ 
n=1
for file in *.jpg;
do 
  echo $file prefix=M file_name=M$n.jpg 
  echo $file_name n=$(( $n+1 ))
  mv $file $file_name 
done 

我第一次运行脚本时,JPG文件将是M1.jpgM2.jpgM3.jpg,但如果我将一个名为A1.jpg的新文件添加到此目录并运行再次编写脚本,M1.jpgM2.jpgM3.jpg将替换为M4.jpg(在运行脚本之前,此文件名为A1.jpg),因为第一个字母是A来到M之前。

我想获得M1M2M3M4.jpg

4 个答案:

答案 0 :(得分:10)

ls命令可以按上次修改时间轻松排序:

$ ls -1t /Users/KanZ/Desktop/Project/Test

要反转排序,请添加-r选项:

$ ls -1tr /Users/KanZ/Desktop/Project/Test

包括1告诉ls每行输出一个文件而没有额外的元数据(如长度,修改时间等),这通常是你需要在shell脚本中需要的将列表发送到其他命令以进行进一步处理。

答案 1 :(得分:3)

(全新,因为问题已经改变)

试试这个:

cd /Users/KanZ/Desktop/Project/Test
n=1
for f in `ls -tr *.jpg`; do
  mv $f M$n.jpg
  n=$(( n + 1 ))
done

答案 2 :(得分:0)

如果您需要按升序对文件路径进行排序

ls -tUr -d $PWD/* 

可能有用

答案 3 :(得分:0)

您需要将-t选项传递给ls命令。 -t选项按修改时间排序,即在按字典顺序排序操作数之前最近修改的第一个。换句话说,可以使用以下命令显示上次下载的文件。

打开终端并输入以下命令。

ls -t