Menu
CoddyTech

添加时间戳

本课属于 Coddy Terminal 学习旅程的“基础知识”单元。第 78 课,共 82 课。

challenge icon

挑战

简单

我们可以在备份文件夹名称中添加时间戳,让名称变得唯一。这样,每次备份都会创建一个新文件夹,而不是覆盖上一次备份。

修改 backup.sh,以便:

  1. 保留上一课中的所有现有代码
  2. 将静态的 backup_dir="backup" 替换为包含时间戳的动态名称
  3. 使用 date 命令和命令替换生成格式为 YYYYMMDD_HHMMSS 的时间戳
  4. 备份文件夹的名称应为:backup_[timestamp]

使用带有格式说明符的 date 命令可以生成时间戳:

date +%Y%m%d_%H%M%S

使用命令替换 $(command) 将输出保存到变量中:

timestamp=$(date +%Y%m%d_%H%M%S)
backup_dir="backup_$timestamp"

每行使用一个 echo 来编写多行脚本是可行的,不过还有一种更简短的方法:here document(此处文档)会将所有内容直接写入文件,直到遇到结束标记。

cat > script.sh << 'EOF'
#!/bin/bash
echo "hello"
EOF

'EOF' 两边的引号可以避免写入文件时展开 $variables。如果脚本本身会使用这些变量,这正是你需要的效果。

以 documents 作为输入运行脚本(echo "documents" | bash backup.sh)。输出应如下所示:

Backing up: documents
Created backup folder: backup_20240115_143052
Files copied successfully

输出中的时间戳会根据当前日期和时间而有所不同。

提示:在定义 backup_dir 之前添加 timestamp=$(date +%Y%m%d_%H%M%S),然后使用 backup_dir="backup_$timestamp" 创建动态文件夹名称。

亲手试试

终端
cat > backup.sh << 'EOF'
#!/bin/bash
read -p "Enter source directory: " source_dir
echo "Backing up: $source_dir"
backup_dir="backup"
mkdir -p "$backup_dir"
echo "Created backup folder: $backup_dir"
cp "$source_dir"/* "$backup_dir"
echo "Files copied successfully"
EOF
echo "documents" | bash backup.sh
ls backup

基础知识中的所有课

自己练习: Terminal 在线编辑器