タイムスタンプの追加
CoddyのTerminalジャーニー「基礎」セクションの一部。レッスン 78/82。
チャレンジ
簡単タイムスタンプを追加して、backup フォルダー名を一意にしましょう。これにより、各バックアップで前のフォルダーを上書きするのではなく、新しいフォルダーが作成されます。
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"1 行ごとに
echoを 1 回使って複数行のスクリプトを書くこともできますが、もっと短い方法があります。ヒアドキュメントを使うと、閉じる語までのすべての内容をそのままファイルに入力できます。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プレイグラウンド