添加时间戳
本课属于 Coddy Terminal 学习旅程的“基础知识”单元。第 78 课,共 82 课。
挑战
简单我们可以在备份文件夹名称中添加时间戳,让名称变得唯一。这样,每次备份都会创建一个新文件夹,而不是覆盖上一次备份。
修改 backup.sh,以便:
- 保留上一课中的所有现有代码
- 将静态的
backup_dir="backup"替换为包含时间戳的动态名称 - 使用
date命令和命令替换生成格式为YYYYMMDD_HHMMSS的时间戳 - 备份文件夹的名称应为:
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 在线编辑器