![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_02.png?e8efa67)
Serversman@VPSで日次バックアップを作成するためのスクリプトを書いています。
特定のディレクトリの中に、日付を名前とするディレクトリを作って、
その中にバックアップを取りたいのですが、dirの使い方がよく分かりません。
http://www.appleple.com/blog/unix/backup-with-cr …
リンク先の、
dir=$(date +"%Y-%m-%d-%H%M")
mkdir $dir
cd $dir
mysqldump --default-character-set=utf8 -u {ユーザ名} -p{パスワード} ablogcms > ablogcms.sql
tar zcfv httpdocs.tgz ../../httpdocs
cd ../
find . -name "20*" | sort -r | while read deldir; do let num="${num=0}+1"; if test $num -ge 10; then rm -rf $deldir;fi; done;
このスクリプトの場合、日付ディレクトリがルートに作られてしまいますよね。
そうでなく /mnt/smdisk ディレクトリの中に日付ディレクトリを作りたい場合、
スクリプトの最初の部分に一行加えて、
cd /mnt/smdisk ←付け足した行
dir=$(date +"%Y-%m-%d-%H%M")
mkdir $dir
cd $dir
(以下同じ)
のようにすれば、目的が達成できますでしょうか?
見よう見まねで付け焼き刃的な勉強をして書いてきたのですが、
どうにも分かりませんでしたので教えて頂ければ助かります。
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
まず, このスクリプトでは
mkdir $dir
としていますが, $dir は絶対パスにはならないので, ディレクトリは「この mkdir を実行する時点でのカレントディレクトリ」に作られます. 「この mkdir を実行する時点でのカレントディレクトリ」がどこかは知りませんが, そのあとの tar で ../../httpdocs としているのでおそらくルートディレクトリとは違うのではないでしょうか.
そして,
cd /mnt/smdisk
を追加すると「tar 以外」は大丈夫な感じがします. 逆に tar は適切なディレクトリをとれないのでまずそうな気がする.
そもそもこのスクリプト自体無駄に cd してるように思えます. cd せず
dir=$(date +"%Y-%m-%d-%H%M")
mkdir $dir
mysqldump --default-character-set=utf8 -u {ユーザ名} -p{パスワード} ablogcms > $dir/ablogcms.sql
tar zcfv $dir/httpdocs.tgz ../httpdocs
find . -name "20*" | sort -r | while read deldir; do let num="${num=0}+1"; if test $num -ge 10; then rm -rf $deldir;fi; done;
くらいにはすべきだし, 最後の find のパイプラインも怪しいのでもうちょっとすっきりさせたいところ.
こんなに早くアドバイスをありがとうございます!
>「tar 以外」は大丈夫な感じがします.
そうですね、tarの行を見落としていました。
うっかり、このままコピペする勢いだったので助かりました。
教えて頂いたばかりか、エレガントに書き換えて頂くなど何とお礼を申し上げていいか!
最後のfindも考えてみます。
ありがとうございました。
No.2
- 回答日時:
本来の目的について何も書いてなかった....
とりあえず
backuproot=/mnt/smdisk
として
dir=$(date +"%Y-%m-%d-%H%M")
を
dir=$backuproot/$(date +"%Y-%m-%d-%H%M")
に変え, 最後の find でカレントディレクトリを表す . を $backuproot に置き換えればできるんじゃないかな. dir という変数名はなんか気にいらないので変えた方がいいかもしれんけど.
あと, 最後の find のところは while を使わない方がいいんじゃないかなぁ. 多分
find $backuproot -name "20*" | sort -r | sed -e '1,10d' | xargs rm -rf
でいけそうな気がする (けど動作確認は自己責任でお願いしますね). ついでにいうとこの find で本当にいいのかどうか微妙だし (もうちょっとオプションを付けたりして限定しておくべきかもしれない), あるいはそもそも find じゃなくて ls に適当なオプションを付ければそれでいいだけなのかもしれない.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP imageフォルダに、画像をリサイズして保存する時のファイル名を変更したい 1 2023/05/30 11:39
- UNIX・Linux Linuxについて質問です。 以下のような設定をしたMakefileを作成するにはどう記述すればよい 1 2023/02/03 20:10
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- UNIX・Linux 空のディレクトリで dir を行ったとき 4 2023/05/05 17:54
- Visual Basic(VBA) 【VBA】印刷マクロのループ処理が反映されません 3 2022/08/09 02:15
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- UNIX・Linux ディレクトリをのスラッシュをとる方法 3 2022/05/31 16:20
- Visual Basic(VBA) Excel VBA でデータ転記について 1 2023/03/07 19:11
- Excel(エクセル) 2つのマクロを連続して動かしたい 3 2022/09/20 23:46
- Visual Basic(VBA) エクセルのマクロについて教えてください 物件ごとのフォルダを作成してます そのフォルダ内にサブフォル 2 2023/07/02 17:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ftpのmgetコマンドの自分の格納...
-
ホームページのディレクトリを...
-
シンボリックリンクについて
-
7zを使うとフォルダの中身がす...
-
拡張子.dどういう意味
-
ファイル名で / (スラッシュ...
-
シェルスクリプトなどを利用し...
-
ディレクトリ内に作成できる最...
-
Linuxコマンドについて
-
EXCEL2000のVBAで、ディレクト...
-
dumpでトラブル
-
linuxの特定のディレクトリへの...
-
rm できない
-
「ドット(.)」と「¥」の意味...
-
FTPでPUTできない原因は何?
-
Minecraftにforgeを入れたら、...
-
バッチファルの置き場所
-
エクセルでハイパーリンクを連...
-
dirの場所を指定したい
-
/home/lost+foundを消してしまった
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数のフォルダを同時に参照し...
-
拡張子.dどういう意味
-
ftpのmgetコマンドの自分の格納...
-
7zを使うとフォルダの中身がす...
-
"cp -a"と"cp -r"の違い
-
make時に出てきたエラーメッセ...
-
scpによるデータ転送後、ディレ...
-
ホームページのディレクトリを...
-
FTPコマンドのCDについて
-
linuxコマンド mkdirでディレ...
-
「ドット(.)」と「¥」の意味...
-
Linuxコマンドについて
-
バッチファルの置き場所
-
/(スラッシュ)で区切ったフル...
-
tarコマンドのエラーについて
-
ファイル名で / (スラッシュ...
-
「照合パターンに合いません」...
-
シンボリックリンクについて
-
linuxで特定のディレクトリのみ...
-
#./configureの時点でダメです。
おすすめ情報