Re: [問題] 請問 shell script

看板Linux作者 (小風)時間17年前 (2009/01/08 13:37), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串9/9 (看更多)
※ 引述《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)
文章代碼(AID): #19PP4WWH (Linux)
討論串 (同標題文章)
文章代碼(AID): #19PP4WWH (Linux)