Menu
CoddyTech

タイムスタンプの追加

CoddyのTerminalジャーニー「基礎」セクションの一部。レッスン 78/82。

challenge icon

チャレンジ

簡単

タイムスタンプを追加して、バックアップフォルダー名が一意になるようにしましょう。こうすれば、以前のバックアップを上書きせずに、バックアップのたびに新しいフォルダーが作成されます。

backup.shを書き換えて、更新後のスクリプト全体が含まれるようにします(前のレッスンのバージョンを確認するには、cat 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"

1行ごとにechoを使って複数行のスクリプトを書く方法でも動作しますが、もっと短い方法があります。ヒアドキュメントを使うと、閉じる単語までの内容をそのままファイルに書き込めます。

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"を使って動的なフォルダー名を作成します。

自分で試してみよう

ターミナル
echo 'cp "$source_dir"/* "$backup_dir"' >> backup.sh
echo 'echo "Files copied successfully"' >> backup.sh
echo "documents" | bash backup.sh
ls backup

基礎のすべてのレッスン

自分で練習してみよう: Terminalプレイグラウンド