遍历目录下的文件


任务:

  • 遍历/data目录下的txt文件
  • 将这些txt文件做一个备份
  • 备份的文件名称后面增加一个年月日的后缀,比如将aming.txt备份为aming.txt_20230927

以下是脚本文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/bin/bash
#date: 2023-09-28
##定义后缀变量,注意下面``(反引号)的含义
suffix=`date +%Y%m%d`
##定义备份的目录
path=/data

## 判断目录是否存在
if [ -d "$path" ];then
## 找到/data目录下的txt文件, 用for循环遍历
for f in `find $path -type f -name "*.txt"`
do
echo "备份文件 $f"
cp ${f} ${f}_${suffix}
done

else
echo "目录不存在"
fi
##脚本结束

# ChatGPT的版本开始
## 这个脚本首先遍历了`/data`目录下的所有`.txt`文件。然后,它提取了文件名和扩展名,并创建了一个备份文件名,该备份文件名包含了当前的年月日。最后,它使用`cp`命令将原始文件复制到`/backup`目录下,并输出备份的文件名。请确保在实际使用前测试该脚本,并根据需要进行调整。
#!/bin/bash

# 遍历/data目录下的txt文件
for file in /data/*.txt; do
if [ -e "$file" ]; then
# 提取文件名和扩展名
filename=$(basename -- "$file")
extension="${filename##*.}"
filename="${filename%.*}"

# 创建备份文件名
backup_filename="$filename_$(date +'%Y%m%d').$extension"

# 备份文件
cp "$file" "/backup/$backup_filename"
echo "备份文件 $file$backup_filename"
fi
done

# 关键知识点总结:
## date命令的用法: 可以根据日期,时间获取到想要的字符
## for循环如何遍历文件
## if 判断目录是否存在

if 判断目录或者文件是否存在的语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
## 定义使用的目录和文件变量
file=/data/aming.txt
folder=/data

## -d 参数判断目录是否存在, 如果目录不存在则创建
if [ ! -d "$folder" ]; then
mkdir -p $folder
fi

## -f 参数判断 $file 文件是否存在, 如果不存在则创建
if [ ! -f "$file" ]; then
touch "$file"
fi

## 判断文件,目录是否存在或者具有权限
## -x 参数判断 $folder 是否存在并且是否具有可执行权限
if [ ! -x "$folder"]; then
mkdir "$folder"
fi

## -n 判断一个变量是否有值
if [ ! -n "$var" ]; then
echo "$var is empty"
exit 0
fi

## 判断两个变量是否相等
if [[ "$var1" = "$var2" || "$var1" == "$var2" ]]; then
echo '$var1 eq $var2'
else
echo '$var1 not eq $var2'
fi