Linux・シェル4 択難易度 標準

logs ディレクトリをバックアップしたいがコピーされない。このスクリプトへの指摘として正しいものは?

#!/bin/bashmkdir -p work/logstouch work/logs/app.logcp work/logs backup_logsecho "backup done"

正答

  1. mkdir -p は既に work/logs があるとエラーで止まるので、-p を外す必要があります。
  2. touch は既存ファイルの中身を空にするので、app.log の内容が消えてしまいます。
  3. コピー先の backup_logs が事前に無いと cp は失敗するので、先に mkdir backup_logs が必要です。
  4. work/logs はディレクトリなので cp に -r が必要です。今は失敗しても echo が成功を表示します。

解説

4 行目の cp はディレクトリ work/logs を対象にしているが、再帰オプション -r が無いため work/logs is a directory (not copied) となりコピーされない。cp -r work/logs backup_logs と書けば中身ごと複製される。mkdir -p は既に存在してもエラーにならないのが特徴で、外すのは逆効果。touch は既存ファイルの更新日時を変えるだけで中身は消さない。cp -r はコピー先が無ければ作るので事前の mkdir は要らない。

参考: www.gnu.org

cprecursive

この問題を含む Linux・シェル のテストを制限時間つきで解く

Linux・シェルクイズへ