如何使用shellscript中按“last modified”排序的文件名执行循环?

如何使用shellscript中按“last modified”排序的文件名执行循环?,shell,unix,imagemagick,ls,Shell,Unix,Imagemagick,Ls,我是Linux新手,我一直在尝试运行一个脚本,该脚本使用ImageMagick的convert处理文件夹中的所有文件。我宁愿在Shell中执行此任务,而不是使用mogrify,因为据我所知,它不会保存不同的文件。文件必须按“上次修改”的顺序处理,因此我使用了以下代码: for file in `ls -1tr {*.jpg,*.png}`; do # imagemagick processes with the filename... done 对于带有空格的文件,此代码会中断,并且根

我是Linux新手,我一直在尝试运行一个脚本,该脚本使用ImageMagick的convert处理文件夹中的所有文件。我宁愿在Shell中执行此任务,而不是使用mogrify,因为据我所知,它不会保存不同的文件。文件必须按“上次修改”的顺序处理,因此我使用了以下代码:

for file in `ls -1tr {*.jpg,*.png}`; do
    # imagemagick processes with the filename...
done
对于带有空格的文件,此代码会中断,并且根据需要使用ls是错误的

我也尝试过这个解决方案,但显然我完全错了,它引发了一个“模糊重定向”错误,我决定需要帮助

while read LINE; do
    ...
done `(ls -1tr {*.png,*.jpg}`
那么如何获得循环文件名的有序列表呢?它不一定是FOR…IN循环,它可以是一段时间,或者任何东西。

试试这个:

for file in `ls -1tr {*.jpg,*.png} | awk '{print $9}'`; do
    # imagemagick processes with the filename...
done
ls-lrth在输出中给出了9个coulmns,其中您只需要第9列文件名,您可以使用awk获得它


如果文件名以空格分隔,请修改awk print以打印第9列之后的所有数据

我尝试过这样做,但根据日期排序的-1tr标志只返回名称,然后我修改为awk{print$1}我担心它只返回了以空格分隔的文件名的第一个名称。如果你有以空格分隔的文件名,你必须修改awk以捕获第9列之后的所有数据。我得到了解决方案,使用{print$0}捕获行中的所有参数,然后设置IFS变量,如前所述,谢谢你的帮助!如果您想在不覆盖输入文件的情况下使用mogrify,可以将-path outputFolder添加到mogrify命令中,它会将结果写入名为outputFolder的子目录中,例如,mogrify-resize 10%-output results*.jpg