- HOME >
- 三貫房之輔
三貫房之輔
IT技術者。C言語、JavaScript、Visual Basicなどのプログラミングを経験後、UNIX系のインフラ(サーバー、ストレージの構築)を担当。 趣味は旅行、写真撮影、音楽鑑賞、野球観戦、TVゲームなど。 最近は昔のSF小説を再読中。
シンボリックリンクとはファイルへのリンクです。Windowsでいうとショートカットになります。 シンボリックリンクの作成や削除は、lnコマンドを使います。 シンボリックリン ...
複数のファイルやディレクトリー内のファイルをまとめてひとつのファイルにしたり、テープに書き込んだりすることをアーカイブするといいます。 ファイルをアーカイブするには、tar(ター)コマン ...
ファイルを圧縮する ファイルを圧縮するには、gzip(ジージップ)コマンドを使います。 ファイルを圧縮すると、ファイル名の末尾にgzという拡張子が追加されます。 また、ファイル名にワイル ...
Linuxには、OSに関する様々な情報やメッセージを収集して、ファイルに出力する仕組みがあります。 これをsyslog(シスログ)といいます。 ユーザーもloggerコマンドを使って、s ...
スケジュールを設定して、自動でプログラムを実行するには、cron(クーロン)を使います。 cronはユーザー毎に設定します。 cronの書式 cronの書式は、以下のように ...
ログを削除するシェルスクリプトです。 このシェルスクリプトの仕様は、以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
#!/bin/bash ### 定数 readonly LIST=delete.lst # 削除対象リスト readonly LOG=delete.log # 削除結果ログ ### 変数 INF_COUNT=0 # 削除成功数 ERR_COUNT=0 # 削除失敗数 ### リストファイル確認 if [[ ! -r "$LIST" ]] then echo "ERR [$LIST] リストファイルが存在しない" >> $LOG 2>&1 exit 1 fi ### リストファイル読み込み while read target pattern days dummy do ### コメントまたは空白の場合は読み飛ばす if [[ "$target" == \#* ]] || [[ -z "$target" ]] then continue fi ### パラメーター不正 if [[ "$pattern" == \#* ]] || [[ -z "$pattern" ]] || \ [[ "$days" == \#* ]] || [[ -z "$days" ]] then (( ERR_COUNT++ )) echo "ERR [$target][$pattern][$days] パラメーター不正" >> $LOG 2>&1 continue fi ### 削除対象ファイル取得 files=$(find $target -maxdepth 1 -name "$pattern" -mtime +$days -type f 2>/dev/null) ### 該当ファイルチェック if [[ -z "$files" ]] then echo "WAR [$target/$pattern] 該当ファイルなし" >> $LOG 2>&1 continue fi ### 削除処理 for buf in $files do cmd_del="/bin/rm -f $buf" ### 削除コマンド実行 $cmd_del > /dev/null 2>&1 if (( $? == 0 )) then (( INF_COUNT++ )) echo "INF DEL $buf" >> $LOG 2>&1 else (( ERR_COUNT++ )) echo "ERR DEL $buf" >> $LOG 2>&1 fi done done < "$LIST" ### 総合エラーチェック echo "INF 削除数=[$INF_COUNT] 削除エラー数=[$ERR_COUNT]" >> $LOG 2>&1 ### 終了処理 if (( ERR_COUNT == 0 )) then exit 0 else exit 1 fi |
メモ 19行目のdummy変 ...
ログをバックアップするシェルスクリプトです。 このシェルスクリプトの仕様は、以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
#!/bin/bash ### 定数 readonly LIST=backup.lst # バックアップ対象リスト readonly LOG=backup.log # バックアップ結果ログ ### 変数 INF_COUNT=0 # バックアップ成功数 ERR_COUNT=0 # バックアップ失敗数 YMDHMS=$(date +"%Y%m%d%H%M%S") # 現在年月日時分秒 ### リストファイル確認 if [[ ! -r "$LIST" ]] then echo "ERR [$LIST] リストファイルが存在しない" >> $LOG 2>&1 exit 1 fi ### リストファイル読み込み while read target pattern backup option dummy do ### コメントまたは空白の場合は読み飛ばす if [[ "$target" == \#* ]] || [[ -z "$target" ]] then continue fi ### パラメーター不正 if [[ "$pattern" == \#* ]] || [[ -z "$pattern" ]] || \ [[ "$backup" == \#* ]] || [[ -z "$backup" ]] || \ [[ "$option" == \#* ]] || [[ -z "$option" ]] then (( ERR_COUNT++ )) echo "ERR [$target][$pattern][$backup][$option] パラメーター不正" >> $LOG 2>&1 continue fi ### バックアップ先ディレクトリ確認 if [[ ! -d "$backup" ]] then (( ERR_COUNT++ )) echo "ERR [$backup] ディレクトリーなし" >> $LOG 2>&1 continue fi ### バックアップ対象ファイル取得 files=$(ls -1 $target/$pattern 2>/dev/null) ### 該当ファイルチェック if [[ -z "$files" ]] then echo "WAR [$target/$pattern] 該当ファイルなし" >> $LOG 2>&1 continue fi ### オプション毎のコマンドを作成 for buf in $files do case "$option" in c) # コピーのみ cmd_cpy="/bin/cp -p $buf $backup/$(basename $buf).$YMDHMS" cmd_del="" ;; d) # コピー後に削除 cmd_cpy="/bin/cp -p $buf $backup/$(basename $buf).$YMDHMS" cmd_del="/bin/rm -f $buf" ;; *) # オプション不正 (( ERR_COUNT++ )) echo "ERR [$target/$pattern][$option] オプション不正" >> $LOG 2>&1 break ;; esac ### バックアップコマンド実行 $cmd_cpy > /dev/null 2>&1 if (( $? == 0 )) then (( INF_COUNT++ )) echo "INF CPY $buf" >> $LOG 2>&1 ### 削除コマンド確認 if [[ -z "$cmd_del" ]] then continue fi ### 削除コマンド実行 $cmd_del > /dev/null 2>&1 if (( $? == 0 )) then echo "INF DEL $buf" >> $LOG 2>&1 else (( ERR_COUNT++ )) echo "ERR DEL $buf" >> $LOG 2>&1 fi else (( ERR_COUNT++ )) echo "ERR CPY $buf" >> $LOG 2>&1 fi done done < "$LIST" ### 総合エラーチェック echo "INF バックアップ数=[$INF_COUNT] バックアップエラー数=[$ERR_COUNT]" >> $LOG 2>&1 ### 終了処理 if (( ERR_COUNT == 0 )) then exit 0 else exit 1 fi |
メモ 20行目のdu ...
ファイルを使用しているプロセスを調べるには、fuserコマンドを使います。 ファイルを使用しているプロセスを停止するには、fuserコマンドの-kオプションを使います。 ファイルを使用し ...
ディレクトリー内のファイルサイズの合計を計算するには、duコマンドを使います。 awkコマンドを併用していますが、awkコマンドの詳細は以下の記事を参照してください。 ディ ...
シェルスクリプトでコマンドラインオプションを使おう getoptsの基本的な使い方 getoptsの基本的な使い方は、以下のようになります。 オ ...