shell查询指定目录下文件修改日期大于指定日期的文件,如果有多个,取时间最早的
时间: 2024-03-10 19:45:09 浏览: 54
可以使用 `find` 命令结合 `sort` 命令来实现:
```
find /path/to/directory -type f -newermt "2022-01-01" -printf "%T@ %p\n" | sort -n | head -n 1 | awk '{print $2}'
```
其中:
- `/path/to/directory` 是指定的目录路径。
- `-type f` 表示只查找普通文件,不包括目录等其他类型的文件。
- `-newermt "2022-01-01"` 表示查找修改日期比指定日期(2022年1月1日)更新的文件。
- `-printf "%T@ %p\n"` 表示输出文件的修改时间和文件路径,其中 `%T@` 表示以秒为单位输出修改时间。
- `sort -n` 表示按照修改时间从小到大排序。
- `head -n 1` 表示取第一个结果,也就是时间最早的文件。
- `awk '{print $2}'` 表示只输出文件路径,去掉修改时间。
你可以根据需要修改目录路径和日期参数。
相关问题
shell查询指定目录下文件修改日期大于指定日期的文件,如果有多个,取时间最早的,如果没找到,则输出没找到
以下是一个 Bash shell 脚本的示例,可以实现您描述的文件查找功能:
```bash
#!/bin/bash
# 输入目录路径和指定日期
read -p "请输入目录路径:" dir_path
read -p "请输入指定日期(格式:YYYY-MM-DD):" target_date
# 将指定日期转换为 Unix 时间戳
target_timestamp=$(date -d "$target_date" +%s)
# 在指定目录下查找文件,并排序
matched_file=$(find "$dir_path" -type f -newermt "$target_date" -printf "%T@ %p\n" | sort -n | head -n 1)
# 判断是否找到匹配的文件
if [[ -z "$matched_file" ]]; then
echo "没找到"
else
# 输出时间最早的文件
matched_file_path=$(echo "$matched_file" | cut -d ' ' -f 2)
echo "找到文件:$matched_file_path"
fi
```
脚本的基本思路是:
1. 通过 `read` 命令获取用户输入的目录路径和指定日期。
2. 将指定日期转换为 Unix 时间戳,方便后续比较。
3. 使用 `find` 命令查找目录下修改日期大于指定日期的文件,并使用 `-printf` 选项输出文件的修改时间和路径。
4. 使用 `sort` 命令按照修改时间排序,使用 `head` 命令取时间最早的那一个文件。
5. 判断是否找到匹配的文件,如果找到则输出文件路径,否则输出“没找到”。
需要注意的是,以上脚本仅供参考,具体实现可能需要根据您的需求进行修改。例如,如果需要查找指定类型的文件,可以在 `find` 命令中添加 `-name` 选项;如果需要递归查找子目录,可以添加 `-recursive` 选项等等。
shell查询指定目录下,大于指定时间,指定时间精确到秒,并且开头为6304-BCUST-的文件,如果有多个,取时间最早的 ,输出该文件目录。输出该文件文件名,输出该文件的创建日期。注意指定路径和指定时间需要定义为变量
好的,以下是符合您要求的 Shell 命令:
```
#!/bin/bash
path="/path/to/directory"
time="2022-05-20 10:10:10"
file=$(find "$path" -type f -name "6304-BCUST-*" -newermt "$time" -printf '%T@ %p\n' | sort -n | head -n 1 | awk '{print $2}')
dir=$(dirname "$file")
name=$(basename "$file")
created=$(date -r "$file" +"%Y-%m-%d %H:%M:%S")
echo "目录:$dir"
echo "文件名:$name"
echo "创建日期:$created"
```
在这个脚本中,我们将指定路径和指定时间定义为了变量`path`和`time`。然后使用`find`命令查找指定目录下大于指定时间,名称以`6304-BCUST-`开头的文件,并按时间戳排序取最早的一个文件。使用`dirname`和`basename`命令分别获取文件的目录和文件名,使用`date`命令获取文件的创建日期。最后使用`echo`命令输出这些结果。
请注意,在使用脚本之前需要将`path`和`time`变量替换为实际的路径和时间。另外,这个脚本需要保存为一个文件,并赋予执行权限后才能运行。
阅读全文