Linux Shell脚本,用于查找特定修改日期后的文件,并按修改日期的顺序对其进行排序

Linux Shell脚本,用于查找特定修改日期后的文件,并按修改日期的顺序对其进行排序,linux,bash,shell,unix,Linux,Bash,Shell,Unix,我正在尝试使用shell脚本,按照修改日期的排序顺序从目录中查找特定修改日期之后的所有文件。这是我当前shell脚本的一部分 条件包含两个步骤:1)在某个修改日期后从目录中获取文件。 2) 按修改日期对文件进行排序 当前目录包含如下文件: Mar 28 11:14 file_H_1 Apr 2 16:37 file_K_2 Apr 1 21:43 file_H_3 Apr 16 19:16 file_H_4 Apr 16 21:00 file_H_5 Apr 16 12:00 file_L_

我正在尝试使用shell脚本,按照修改日期的排序顺序从目录中查找特定修改日期之后的所有文件。这是我当前shell脚本的一部分

条件包含两个步骤:1)在某个修改日期后从目录中获取文件。 2) 按修改日期对文件进行排序

当前目录包含如下文件:

Mar 28 11:14 file_H_1
Apr  2 16:37 file_K_2
Apr  1 21:43 file_H_3
Apr 16 19:16 file_H_4
Apr 16 21:00 file_H_5
Apr 16 12:00 file_L_6
Apr  9 14:08 file_B_7
Apr  4 00:39 file_H_8
Apr  4 00:39 file_H_9
Apr  4 00:39 file_C_10
Apr  4 00:39 file_H_11
Mar 27 14:39 file_H_12
我希望最终输出为文件列表,修改日期在“2018-04-09 00:00:00”之后,并按修改日期排序。 输出应为:

file_B_7
file_L_6
file_H_4
file_H_5
我试过这个:
1) 用于在特定修改日期后获取文件

find . -type f -newermt "2018-04-09 00:00:00"
OUTPUT of this:
file_L_6
file_H_5
file_B_7
file_H_4
ls -lt
OUTPUT of this
Apr 16 21:00 file_H_5
Apr 16 19:16 file_H_4
Apr 16 12:00 file_L_6
Apr  9 14:08 file_B_7
Apr  4 00:39 file_H_8
Apr  4 00:39 file_H_9
Apr  4 00:39 file_C_10
Apr  4 00:39 file_H_11
Apr  2 16:37 file_K_2
Apr  1 21:43 file_H_3
Mar 28 11:14 file_H_1
Mar 27 14:39 file_H_12
2) 按修改日期订购文件

find . -type f -newermt "2018-04-09 00:00:00"
OUTPUT of this:
file_L_6
file_H_5
file_B_7
file_H_4
ls -lt
OUTPUT of this
Apr 16 21:00 file_H_5
Apr 16 19:16 file_H_4
Apr 16 12:00 file_L_6
Apr  9 14:08 file_B_7
Apr  4 00:39 file_H_8
Apr  4 00:39 file_H_9
Apr  4 00:39 file_C_10
Apr  4 00:39 file_H_11
Apr  2 16:37 file_K_2
Apr  1 21:43 file_H_3
Mar 28 11:14 file_H_1
Mar 27 14:39 file_H_12
但我正在努力将这两个条件结合起来

我也尝试过,但它是按文件名排序,而不是按修改日期排序:

find . -type f -newermt "2018-04-9 00:00:00" | sort -n | while read file_name; do
echo file=$file_name
done
    OUTPUT of this:
    file_B_7
    file_H_4
    file_H_5
    file_L_6

请提出一些解决方案。

这应该可以解决问题

ls -t | egrep "$(find * -maxdepth 0 -type f -newermt "2018-04-9 00:00:00" -print | sed 's/|/\\|/g' | tr '\n' '|' | sed 's/|$//')"

这应该能奏效

ls -t | egrep "$(find * -maxdepth 0 -type f -newermt "2018-04-9 00:00:00" -print | sed 's/|/\\|/g' | tr '\n' '|' | sed 's/|$//')"
试试这个

ls-t | find-键入f-newermt“2018-04-09 00:00:00”

试试这个


ls-t | find-f型-newermt“2018-04-09 00:00:00”

与管道一起使用
find
ls-t

find -type f -newermt "2018-04-09 00:00:00" | xargs ls -tl
xargs
find
的输出提供给
ls

如果某些文件名有空格,请使用以下选项:

find -type f -newermt "2018-04-09 00:00:00" -print0 | xargs -0 ls -tl
-print0
选项允许将文件名删除器用作
\0
xargs
要求此分隔符带有选项
-0

请注意,如果您需要相反的时间顺序,可以使用
ls-ltr


在任何情况下,您都不应该分析
ls
()的结果。

使用管道组合使用
find
ls-t

find -type f -newermt "2018-04-09 00:00:00" | xargs ls -tl
xargs
find
的输出提供给
ls

如果某些文件名有空格,请使用以下选项:

find -type f -newermt "2018-04-09 00:00:00" -print0 | xargs -0 ls -tl
-print0
选项允许将文件名删除器用作
\0
xargs
要求此分隔符带有选项
-0

请注意,如果您需要相反的时间顺序,可以使用
ls-ltr


在任何情况下,您都不应该分析
ls
()的结果。

除了使用
xargs-ls
之外,您还可以将find输出直接插入
ls
命令行:

ls -tr `find -type f -newermt "2018-04-09 00:00:00"`

请注意,如果不是所有的文件名都通过不正确排序而自动放入一个命令行-
xargs ls
,这两种方法都会失败,这里会显示一条错误消息。

除了使用
xargs ls
之外,您还可以将find输出直接插入
ls
命令行:

ls -tr `find -type f -newermt "2018-04-09 00:00:00"`

请注意,如果不是所有文件名都通过排序不正确而安静地放入一个命令行-
xargs ls
,这两种方法都会失败,这里会显示一条错误消息。

Add
awk'{print'\'$0'\\'}'
在两者之间添加
awk'
来处理带有空格的文件名。@kokokogino我不会这样做,而是使用
print0
。Add
awk'{print“\”“$0”\”“}”
来处理带有空格的文件名。@Kokogino我不会这样做,而是使用
print0