写一个shell程序,遍历某个目录下的所有文件,找到不是今天的文件,进行压缩
时间: 2023-08-31 21:39:59 浏览: 97
### 回答1:
您可以使用下面的代码来遍历某个目录下的所有文件,并找到不是今天创建的文件,并将其压缩:
```
#!/bin/bash
# 遍历目录中的所有文件
for file in /path/to/directory/*
do
# 获取文件的创建时间
create_time=$(stat -c %y "$file" | cut -d' ' -f1)
# 获取今天的日期
today=$(date +%Y-%m-%d)
# 如果文件不是今天创建的,则进行压缩
if [ "$create_time" != "$today" ]
then
gzip "$file"
fi
done
```
需要注意,这段代码假设文件的创建时间是文件系统中保存的,如果文件系统不保存文件的创建时间,则无法使用这段代码。
此外,还可以使用其他命令来获取文件的修改时间,比如 `stat -c %y` 和 `find` 命令。
希望这能帮到您!
### 回答2:
可以使用以下脚本实现:
```shell
#!/bin/bash
# 指定要遍历的目录
directory="/your/directory/path"
# 获取今天的日期
today=$(date +"%Y%m%d")
# 遍历目录下的所有文件
for file in "$directory"/*
do
# 检查文件是否是今天的文件
file_date=$(date -r "$file" +"%Y%m%d")
if [ "$file_date" != "$today" ]; then
# 压缩文件
gzip "$file"
echo "已压缩文件:$file"
fi
done
```
解释:
- 首先,使用`directory`变量指定要遍历的目录的路径。
- 然后,使用`today`变量存储今天的日期,格式为`%Y%m%d`。
- 接下来,使用`for`循环遍历目录下的所有文件。
- 在循环内部,使用`date -r`命令获取每个文件的修改日期,并将其格式化为`%Y%m%d`格式,存储在`file_date`变量中。
- 使用条件语句判断`file_date`是否与`today`相等,如果不相等,则说明文件不是今天的文件。
- 在条件为真的情况下,使用`gzip`命令压缩文件,并输出相应的提示信息。
注意:
- 请将`/your/directory/path`替换为实际的目录路径。
- 为了能够执行该脚本,可能需要将其保存为可执行文件,或使用`bash script.sh`命令运行。
### 回答3:
您好,下面是一个用bash编写的简单的shell程序,用于遍历某个目录下的所有文件,找到不是今天创建的文件,并进行压缩操作。请注意,这段代码仅提供基本功能,并未添加错误处理等复杂逻辑:
```shell
#!/bin/bash
# 设置待遍历的目录
directory="/path/to/directory"
# 获取当天的日期,以便于比较文件的创建日期
today=$(date +"%Y-%m-%d")
# 遍历目录下的所有文件
for file in "$directory"/*; do
# 查找不是今天创建的文件
if [[ ! $(date -r "$file" +"%Y-%m-%d") == "$today" ]]; then
# 压缩文件
tar -czvf "$file.tar.gz" "$file"
fi
done
```
您只需将`/path/to/directory`替换为您想要遍历的目录的实际路径,并将程序保存为shell脚本文件,例如`compress_files.sh`。然后,在终端中执行以下命令,即可运行该shell程序:
```shell
bash compress_files.sh
```
执行该脚本后,程序会遍历指定目录下的所有文件,找到不是今天创建的文件,并将其压缩为以`.tar.gz`结尾的压缩包文件。
希望对您有所帮助!
阅读全文