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

Linux 如何使用shell脚本按名称对文件进行排序,linux,shell,sorting,Linux,Shell,Sorting,我想用Shell脚本按日期对所有文件进行排序 例如,在/Users/KanZ/Desktop/Project/Test/中有文件M1.h、A2.h和F4.h 每个文件都有不同的时间。如何按日期和时间将所有这些文件从最早的文件排序到当前文件 目前我有一个重命名脚本: cd /Users/KanZ/Desktop/Project/Test/ n=1 for file in *.jpg; do echo $file prefix=M file_name=M$n.jpg echo $fil

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

例如,在
/Users/KanZ/Desktop/Project/Test/
中有文件
M1.h
A2.h
F4.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.JPG
M2.JPG
M3.JPG
,但如果我将名为
A1.JPG
的新文件添加到此目录并再次运行脚本,
M1.JPG
M2.JPG
M3.JPG
将替换为
M4.JPG
(在运行脚本之前,此文件名为
A1.jpg
),因为第一个字母是
A
,位于
M
之前


我想获得
M1
M2
M3
M4.jpg
ls
命令可以按上次修改的时间轻松排序:

$ ls -1t /Users/KanZ/Desktop/Project/Test
要反转排序,请包括
-r
选项:

$ ls -1tr /Users/KanZ/Desktop/Project/Test
包含
1
告诉
ls
每行输出一个文件,而不需要额外的元数据(如长度、修改时间等),如果需要将列表发送给其他命令进行进一步处理,这通常是shell脚本中所需的。

(由于问题发生了变化,因此是全新的)

试试这个:

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

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

ls -tUr -d $PWD/* 

可能有用

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

打开终端并键入以下命令

ls -t

这从新到旧排序-这不是要求的。然后根据需要使用
-r
标志来更改顺序。没有发生任何情况。您不应该指定文件的类型吗?例如.*.h*.jpg您尝试了什么?结果是什么?(无需指定文件的后缀:如果没有指定,将显示所有文件。)我想先按时间和日期对jpg文件进行排序,然后我想将它们重命名为A1.jpg A2.jpg A3.jpg。现在我可以重命名所有文件,但我想在重命名之前将它们从旧文件排序为当前文件。这与您的问题无关:请重新编写/更新您的初始问题。@kantawit,您需要编辑您的问题以添加该信息。问题中途更改。它开始排序
*.h
文件,但注释和代码反映排序
*.jpg
文件。提问时一致性很重要。