Re: [問題] 請問 shell script
※ 引述《ilay (iWork 09真是爽)》之銘言:
: #!/bin/bash
: find -type f -size +2048k -exec ls -la {} \; >> log_manager.sh
: date >> log_manager.sh
: find /var/log -name "*.log" -size +2048k | xargs -i cp {} {}.`date +%Y-%m-%d-%H:%M`
: 以上是一支 shell script 檔名為 log_manager.sh
: 目前要加上一樣功能:
: 當copy的目的地有一樣大小的檔案時(檔名不限) 則取消該檔案複製動作
: 這樣要怎麼作才好了
: 懇請先進們指教! thx
如果你的需求是:
當要copy的檔案已經有被copy過了,而且檔案大小一樣的話,視為不必要再copy,
並取消copy的動作,例如,當要處理/var/log/abcd.log時,發現/var/log底下有
1. /var/log/abcd.log.2008-01-01-12:34 (size: 1111)
2. /var/log/abcd.log.2008-01-02-33:33 (size: 2222)
而原本的 /var/log/abcd.log 的 size 若和上述其中一項相同的話,就不copy.
那麼,你可以這樣做:
把原本的最後一行(find /var/log -name "*log" ......) 改成下面這樣
for SRC_FILE in `find /var/log -name "*.log" -size +2048k`;do
# 取得原始檔案的size
SRC_FILE_SIZE=`stat -c%s $SRC_FILE 2>/dev/null`
# 1 - 需要copy, 0 - 不需要copy(先設成需要copy)
NEED_COPY=1
# 只檢查該檔後面有.年(4個數字),高興的話可以寫長一點,比如說,你想要
# 檢查的格式為2009-01-23這種,就可以寫成
# .[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]
for DST_FILE in "`ls ${SRC_FILE}.[0-9][0-9][0-9][0-9]* 2>/dev/null`";do
if [ -f "$DST_FILE" ];then
# 取得所有目的檔的size一一比對
DST_FILE_SIZE=`stat -c%s $DST_FILE 2>/dev/null`
# 如果其中之一有size相同的話...
if [ "$DST_FILE_SIZE" = "$SRC_FILE_SIZE" ];then
# 設為不需要copy,並且不用再繼續檢查
NEED_COPY=0
break
fi
fi
done
# 如果需要copy,才copy
if [ "$NEED_COPY" = "1" ];then
cp $SRC_FILE $SRC_FILE.`date +%Y-%m-%d-%H:%M`
fi
done
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.249.207.134
※ 編輯: phterry 來自: 60.249.207.134 (01/08 13:40)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 9 之 9 篇):