shell查找修改日期大于指定日期的所有文件,如果没找到输出没找到,如果有多个文件取时间最早的
时间: 2024-03-16 21:42:16 浏览: 134
快递查找出指定日期修改过的文件
可以使用`find`命令和`stat`命令来查找修改日期大于指定日期的所有文件,并获取修改日期最早的文件。假设指定的日期是`2021-08-25`,以下是实现的步骤:
1. 使用`stat`命令将指定日期转换为UNIX时间戳:
```
date -d "2021-08-25" +%s
```
2. 使用`find`命令查找修改日期大于指定日期的所有文件,并将它们的修改日期和文件名输出到一个临时文件:
```
find . -type f -newermt "2021-08-25" -printf "%T@ %p\n" > temp
```
此命令将查找当前目录及其子目录中所有文件,并输出它们的修改日期和文件名到一个名为`temp`的文件中。`-newermt`选项用于指定要查找的修改日期大于指定日期的文件,`-printf`选项用于指定输出格式,其中`%T@`表示以UNIX时间戳格式输出修改日期。
3. 使用`sort`命令对临时文件中的条目按时间戳进行排序,并仅保留第一行:
```
sort -n temp | head -n 1
```
此命令将对临时文件`temp`进行排序,并将最早的修改日期和文件名输出到终端。
4. 如果找到了文件,则使用`cut`命令提取文件名:
```
sort -n temp | head -n 1 | cut -d' ' -f2-
```
此命令将提取输出的第一行中的文件名,并将其输出到终端。
5. 如果没有找到文件,则输出“没有找到”:
```
if [ ! -s temp ]; then echo "没有找到"; fi
```
此命令使用`if`语句检查临时文件`temp`是否为空,如果为空则输出“没有找到”。
将以上命令组合在一起,可以实现查找修改日期大于指定日期的所有文件,并获取修改日期最早的文件的功能。完整的命令如下:
```
#!/bin/bash
# 指定日期转换为UNIX时间戳
timestamp=$(date -d "2021-08-25" +%s)
# 查找修改日期大于指定日期的所有文件,并输出修改日期和文件名到临时文件
find . -type f -newermt "2021-08-25" -printf "%T@ %p\n" > temp
# 如果找到文件,则输出修改日期最早的文件名
if [ -s temp ]; then
earliest_file=$(sort -n temp | head -n 1 | cut -d' ' -f2-)
echo "修改日期最早的文件是:$earliest_file"
else
echo "没有找到"
fi
# 删除临时文件
rm -f temp
```
您可以将此脚本保存为`.sh`文件并在终端中运行。请注意,这里的日期格式必须是YYYY-MM-DD,并且修改日期是指文件的最后修改时间,而不是创建时间。如果您需要查找创建日期大于指定日期的文件,则需要使用`-newerct`选项而不是`-newermt`选项。
阅读全文