logs ディレクトリをバックアップしたいがコピーされない。このスクリプトへの指摘として正しいものは?
#!/bin/bashmkdir -p work/logstouch work/logs/app.logcp work/logs backup_logsecho "backup done"正答
mkdir -pは既に work/logs があるとエラーで止まるので、-p を外す必要があります。- touch は既存ファイルの中身を空にするので、app.log の内容が消えてしまいます。
- コピー先の backup_logs が事前に無いと cp は失敗するので、先に
mkdir backup_logsが必要です。 - 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
この問題を含む Linux・シェル のテストを制限時間つきで解く
Linux・シェルクイズへ