Menu
CoddyTech

Thêm dấu thời gian

Thuộc phần Kiến thức cơ bản trong hành trình Terminal của Coddy. Bài học 78 trên 82.

challenge icon

Thử thách

Dễ

Hãy thêm dấu thời gian vào tên thư mục sao lưu để tên thư mục luôn duy nhất. Nhờ vậy, mỗi lần sao lưu sẽ tạo một thư mục mới thay vì ghi đè lên thư mục trước đó.

Sửa đổi backup.sh để:

  1. Giữ lại toàn bộ code hiện có từ bài học trước
  2. Thay backup_dir="backup" cố định bằng một tên động có dấu thời gian
  3. Dùng phép thay thế lệnh với lệnh date để tạo dấu thời gian theo định dạng YYYYMMDD_HHMMSS
  4. Đặt tên thư mục sao lưu theo dạng: backup_[timestamp]

Lệnh date cùng các ký hiệu định dạng sẽ tạo dấu thời gian:

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

Dùng phép thay thế lệnh $(command) để lưu đầu ra này vào một biến:

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

Viết script nhiều dòng bằng một lệnh echo cho mỗi dòng vẫn hiệu quả, nhưng có cách ngắn hơn: here document gửi mọi nội dung cho đến từ kết thúc thẳng vào tệp.

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

Dấu nháy quanh 'EOF' ngăn $variables được mở rộng khi ghi tệp. Đây là điều bạn cần khi chính script sử dụng chúng.

Chạy script với documents làm đầu vào (echo "documents" | bash backup.sh). Đầu ra sẽ trông như sau:

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

Dấu thời gian trong đầu ra sẽ khác nhau tùy theo ngày giờ hiện tại.

Gợi ý: Thêm timestamp=$(date +%Y%m%d_%H%M%S) trước khi định nghĩa backup_dir, sau đó dùng backup_dir="backup_$timestamp" để tạo tên thư mục động.

Tự làm thử

Terminal
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

Tất cả bài học trong Kiến thức cơ bản

Tự luyện tập: Playground Terminal