TyroneYeh wrote:
為什麼一定要自己寫 ...(恕刪)

因為是老師派的作業為了學分只好作

==============

前面好多前輩都回答好多了就不用插手了~我只是來對樓主加油一下而已,不知道做出來了沒XD?

寫code十幾個小時不算什麼的習慣就好~你又讓我想起上禮拜四從晚上11點不停的寫code寫到隔天下午三點的爆肝16小時,寫完第一個想到的是肚子好餓 雖然我是自作自受硬把一個月前派的作業拖到要交前一天才開始動~

樓主加油吧
卡米攝影誌 http://jiawei.twbbs.org/
redirain wrote:
因為是老師派的作業為...(恕刪)


前面的前輩雖有提供方法
但是都是我所陌生的
我很難理解

而似乎有個盲點我看不見
我怎麼作都在原地打轉
好累

整串大致上都懂
偏偏幾個關鍵的地方就是無法座出來
1.該怎麼從大於2m的文字檔中挑出.log的檔案名稱
2.然後利用挑出的檔名複製一份加壓縮然後在搬到另一個地方
3.壓縮搬移後在將前面的.log檔案內的文字清空
4.最後判斷那個搬移的壓縮檔有沒有衝突 一樣的話則不儲存


邁向的十四小時
但是我想放棄了
我可以徵求有前輩能以幼稚園的程度教我嗎= =
付薪水也在所不惜


wrh7415369 wrote:
付薪水也在所不惜


真的有薪水嗎?


#!/bin/sh

SRCDIR=/tmp/log1
DSTDIR=/tmp/log2
DATE=`date +%Y-%m-%d-%H-%M`

echo $DATE

files=`find $SRCDIR -name "*" -size +100c `

for fn in $files
do
if file -b $fn | grep "text" > /dev/null ; then

nfn=$DSTDIR/`echo $fn | sed "s/.*\///g"`.$DATE.gz

echo -n Processing file: $fn =\> $nfn

if [ -f $nfn ] ; then
echo -n " File existed. Skip."
else
cat $fn | gzip > $nfn
rm -f $fn
touch $fn
fi
echo
fi

done


還沒debug...
hxxX54yPZ5HH5VHP\hmpX5gTPh99X5J4Ph00X5YBPjjhexX5exHPDX52JP555554P5ZZ5rr
wrh7415369 wrote:
邁向的十四小時
但是我想放棄了...(恕刪)


大家應該看到你有奮鬥. 才願意提出自己想法吧...
每個人對解釋都不同,所以寫寫出來東西也不同..
所以. 你應該能由這些熱心大哥提供東西內找靈感.
主要是,你要融會貫通呀~
(你們老師主要應該是要你們用find 指令, 多看 man find)
我覺得. shell 只是看對指令了解程度. 不代表就會程式...
因為.... 我完全沒寫過C這類"程式".....>"<

#!/bin/sh
date=`date +%Y-%m-%d-%H-%M`
mount_path="/tmp"
find_path="/var/log"

echo $date >> /var/log/log_manager.log
find $find_path -name "*.log" -exec ls -l {} \; >> /var/log/log_manager.log
find $find_path -name "*.log" -size +2048 | sed 's/\/var\/log\// /g' |
while read files
do
cp $find_path/$files $find_path/$files.$date
tar zcvf $find_path/$files.$date.tgz $find_path/$files
cp /dev/null $find_path/$files
diff_files=$(diff -u $find_path/$files.$date.tgz $mount_path/$files.$date.tgz )
if [[ $diff_files == "" ]]; then
mv $find_path/$files.$date.tgz $mount_path
fi
done
irs wrote:
#!/bin/sh

SRCDIR=/tmp/log1
DSTDIR=/tmp/log2
DATE=`date +%Y-%m-%d-%H-%M`

預先定義來源, 目的, 日期

irs wrote:
echo $DATE

印出時間

wrh7415369 wrote:
1.該怎麼從大於2m的文字檔中挑出.log的檔案名稱

irs wrote:
files=`find $SRCDIR -name "*" -size +100c `

取得要處理的檔案清單(完整路徑形式), 參數要用 "*.log" -size +2000000c


irs wrote:
for fn in $files
do
if file -b $fn | grep "text" > /dev/null ; then

for迴圈處理檔案, 只有當file結果為text時才處理
fn帶有要處理的檔案的完整路徑

wrh7415369 wrote:
2.然後利用挑出的檔名複製一份加壓縮然後在搬到另一個地方

irs wrote:
nfn=$DSTDIR/`echo $fn | sed "s/.*\///g"`.$DATE.gz

將完整路徑裁切出最後一段的檔案名稱,
前面加上目的地路徑, 後面加上日期和.gz副檔名
nfn將帶有完整的目的地檔案名稱

irs wrote:
echo -n Processing file: $fn =\> $nfn

印出正要處理的檔案

wrh7415369 wrote:
4.最後判斷那個搬移的壓縮檔有沒有衝突 一樣的話則不儲存

irs wrote:
if [ -f $nfn ] ; then
echo -n " File existed. Skip."

如果目的地檔案已經存在, 就跳過, 並印出訊息

wrh7415369 wrote:
3.壓縮搬移後在將前面的.log檔案內的文字清空

irs wrote:
else
cat $fn | gzip > $nfn
rm -f $fn
touch $fn
fi

如果不存在, 把要處理的檔案丟給gzip, 直接存成新檔案
強制刪除舊檔, 然後再"摸"出一個0位元組的檔案

irs wrote:
echo
fi

done

搞定, 收工.


執行期間用 bala.sh > bala.log 2>&1 把 STDERR 重導到 STDOUT, 錯誤訊息就會出現在 bala.log裡面了.

hxxX54yPZ5HH5VHP\hmpX5gTPh99X5J4Ph00X5YBPjjhexX5exHPDX52JP555554P5ZZ5rr
irs wrote:
如果不存在, 把要處理的檔案丟給gzip, 直接存成新檔案
強制刪除舊檔, 然後再"摸"出一個0位元組的檔案



在某些情況下
這個動作會造成寫這個log的process core dump
或是log file再也不會更新
所以不建議這麼做
要的話也是cp後再用cat /dev/null去清空

PS.這是實務上遇到問題
PCDVD OC化, Mobile01 PCDVD化,下一個會是哪一個? 雙重標準了不起? 不能接受事實真相,繼續矇眼是你的事,愛檢舉回報請,停權就停權吧
irs wrote:
真的有薪水嗎?#!/...(恕刪)


真是慚愧
我竟然看不懂兄臺寫的東西
看來我程度還得加強不少

剛剛跟老師通過電話了
還好不會有太大影響了
我終於能休息
十五個小時

omg

雖然通完電話才看到這文章
而且竟然看不懂
不過還是感謝你願意幫忙而動腦
還有網友願意msn教學
真是太感激你們了
我先去讓頭冰敷一下

xd
只是上來幫樓主加油., 上過3個不同版本的unix系統.每次只要講到正規表示式保證睡的跟豬一樣佩服樓上各位大大.
路過的,發一下聲.....
版友的script都有各自的處理邏輯、指令(find, grep, awk ....etc.,)參數的應用、再加上shellscript參數處理的技巧
對同一個題目,各有各的巧妙,各有各的處理流程
盡量別將各版本混在一起用,有時候會互相打架

這火燒屁股的題目
樓主救急的話,抓單一版本,抓清楚整個script流程,看清楚各指令的參數的意義,debug完先上菜給老師吧

回頭將各版本抄錄下來,先啃出現率最高的指令說明,依序掃過
消化各家流程並瞭解差異,試著以自己的思維寫個版本script,再回貼回來
我想,各位前輩會樂意指導你的

PS:
若不瞭解regular expression,手頭也沒有較完整的學習資料的話
真的可以先去看鳥哥的網站,好好消化一下
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!