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

标签 linux shell sorting

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

例如,在 /Users/KanZ/Desktop/Project/Test/ 中有文件 M1.h, A2.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

最佳答案

ls 命令可以轻松地按最后修改时间排序:

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

要反转排序,请包含 -r 选项:

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

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

关于linux - 如何使用 shell 脚本按名称对文件进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14001797/

相关文章:

arrays - 查找总和等于给定总和的所有唯一对

c - 在 C 中对二维字符串数组进行排序

php - 无法使用 PHP 创建的管道写入 C 应用程序的 STDIN

Linux:何时使用分散/收集 IO(readv、writev)与带有 fread 的大缓冲区

bash - 在 shell 脚本中定义一个 Increment 变量,该变量在每个 cronjob 上递增

c - execve() 和 execvp() 忽略第一个参数

mysql - 根据省略单词对查询进行排序

Python systemd 服务启动后不久停止

ruby - 如何阻止 Guard 创建占用大量空间的日志文件

linux - perl 命令行第一行 + 匹配文件中的行后删除单词