バックアップするやつ(Mac)

プライベートでも使いたかったので、Mac版も作りました。

Windows版はこっち

ファイル名にinsideが付いてる通りoutsideもあります。
対象フォルダ格納しないといけないか格納しなくてもいいかの違いになりますが、まだ動確出来てないので、出来たら投稿すると思います。

Windowsだと.batですが、Macだと.commandに拡張子が変わります。
WindowsとMacって漠然と色々違うぐらいにしか思ってませんでしたが、拡張子とか見るとなんだかしみじみ感じます。
一応自端末で動確済みです。(Big Sur 11.5.2)

Win版のページと同じように解説を最後に載せますが、Macのコマンドはあんまり触ったことないので参考多めです。
気になる人は自分で色々調べたり触ってみてね。
途中で載せたページも全部まとめて最後に載せ直しています。

Win版はダウンロードして叩けば動きましたが、Macではそうもいきません。
まずは実行権限を与える必要があります。
すぐ終わりますがとてもめんどくさい。

このページの「3. 作成したファイルの実行権限をつける」を実施。
Macでバッチファイル(.command)を作る

上記の処理をしなくてもできる方法があるっちゃあるんですが、たかだかコピーするだけだしなぁと。
やり方としては、ファイル内にsudoを追加してスーパーユーザ権限で実行します。
追加したい場合は各自でやってください。
ちなみにこっちは動確してないので、調べた感じ多分そうなるだろうってところです。
変更内容は多分こんな感じ。

cp cp *.txt ./"bkup"/${today}/${now}
  ↓
sudo cp *.txt ./"bkup"/${today}/${now}

パスワードを求められるので都度入力が必要とのこと。

実行権限の付与に戻ってサイト内のコマンドをちょっと解説すると。
cd ディレクトリ
cd:移動
ディレクトリ:フォルダパス

ls -l ファイル名.command
ls:現在のフォルダ内のアイテムを表示
-l:権限を表示
ファイル名.command:表示する対象ファイルを指定
※大文字のI(アイ)でなく小文字のl(エル)です。

chmod u+x ファイル名.command
chmod:権限の変更
u+x:ユーザに実行権限を付与
ファイル名.command:変更する対象ファイルを指定
ここが詳しいので興味湧いた方は覗いてみてください。
Linuxの権限確認と変更(chmod)(超初心者向け)

  • 使い方
    バックアップを取りたいファイルと同じフォルダにbkup_inside.commandを格納して実行。
    実行すると同じフォルダ内にbkupフォルダが作成されます。
    その中に日付フォルダがあり、更に時間フォルダがあって対象ファイルが保存されています。
    同じ日に何度叩いてもひたすら時間でフォルダ作って保存し続けます。
    だいぶ階層が深くなりますが、手動でリヴィジョン管理すると思えばいい感じ?
  • フォルダ構成
    testフォルダにcommandを置いたとします。
     test
     └ bkup_inside.command
     └ bkup
      └ 日付
       └ 時間
        └ バックアップ
  • バックアップ対象ファイルの変更
    21行目「cp *.txt ./”bkup”/${today}/${now}」の「.txt」を対象ファイルに変更。

簡単に中身解説。

#!/bin/bash

#から始まる行はコメント。

MY_DIRNAME=$(dirname $0)

変数MY_DIRNAMEにcommandファイルがあるパスを代入
$0はスクリプト名を取得する変数。

cd $MY_DIRNAME

commandファイルがあるフォルダに移動。

大体この3行はセットで書かれることが多いらしいです。
お約束みたいなもんですかね。

today=`date +"%Y%m%d"`

dateは日時を取得する関数、+formatで望んだ形に成形できます。
Macはアルファベット重ねなくても0埋めしてくれるっぽい?
他のフォーマットは以下を参考にしてください。
21.1.1 Time conversion specifiers

now=`date +"%H%M%S"`

今度は同じdateから時分秒を取得します。

if [ ! -d {./"bkup"} ]; then
mkdir ./"bkup"
fi

command実行したフォルダにbkupフォルダがあるか確認します。
なかったら作ります。

if [ ! -d {./"bkup"/${today}} ]; then
  mkdir ./"bkup"/${today}
fi

bkupフォルダ内に当日の日付フォルダがあるか確認します。
なかったら作ります。

mkdir ./"bkup"/${today}/${now}

bkupフォルダ内の日付フォルダ内に現在時刻で時間フォルダを作ります。

cp *.txt ./"bkup"/${today}/${now}

対象ファイルをなんやかんやして作った時間フォルダにコピーします。
デフォルトはtxtファイルを全部コピーするようにしています。

exit

commandを終了します。
デフォルトだと「プロセスが完了しました。」的なメッセージが出てターミナル画面が消えません。
環境設定の方から変えられるので、batの方にはあったpauseは抜いています。
Win版と同じようにcommand完了後、ターミナルが消えるようにしたい場合はこのサイトを参考にどうぞ。
Macのターミナルがexitで消えるようにする方法

自分の端末で動作確認してた際、何回やってもNo such file or directoryが出るなぁと悩んでたら、どうも改行コードが原因のようでした。
Windows端末で元のコードを組んだもんでWindows標準のCRLFになっていた模様。
LFに直したら問題なく動いてくれました。

改行コードに気付くまで大体30分、修正やら動確やらで1時間ぐらい。
うーん、まぁ、滅多に触らないやつだとこんなもんです。
改行コード詰まってたのはあれですが。
間違い等あればガンガン突っ込んでください。

参考
Linuxの権限確認と変更(chmod)(超初心者向け)
初心者向けシェルスクリプトの基本コマンドの紹介
Macでバッチファイル(.command)を作る
Macでdateコマンドを使いこなす
21.1.1 Time conversion specifiers
Macのターミナルコマンド一覧(基本編)
ページ末に中級編リンクもあります。
ファイルやディレクトリが存在するかシェルスクリプトで確認する
Macのターミナルがexitで消えるようにする方法

投稿者: motalenemy

切り絵とゲームを気まぐれで作る仮面ライダー好きな馬骨

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。