藍森林首頁 | 返回主頁 | 本站地圖 | 站內搜索 | 聯繫信箱 |
 您目前的位置:首頁 > 自由軟件 > 技術交流 > 應用編程


    

藍森林 http://www.lslnet.com 2006年6月26日 11:18


請高手幫忙看看腳本的問題出在哪裡了?

下面的腳本我想實現的功能是:把一個目錄裡的好多的文件都移動到別的目錄下,但是要留下最近2個月的。但是我在執行我寫的這個腳本的時候,他把所有的文件都移東過去了。在shell中該如何比較字符串的大小啊?

#!/bin/sh
Dir=/home/tony/test
Time=`/bin/date +%Y-%m --date="2 months ago"`
#echo $time
file=`ls $Dir`
for i in $file
do
   filetime=`ls --full-time $Dir/$i | grep ^- | awk '{print $6}' | awk -F"-" '{print $1"-"$2}'`
   if [ $filetime > $Time ]
   then
      mv $Dir/$i /home/tony/a/
   fi
done

直接用find來做不好嗎?~

呵呵~!我知道用find可以實現,但是我上面的那個腳本裡面字符串比較該如何做啊?

這個問題困擾我好多天了。請高手指點迷津!!

-->


打印你比較的兩個time看看,

肯定是filetime始終大於那個什麼time了,

所以全部移動過去了,出現該問題可能是你給他們賦值的時候格式有錯.

if [ $filetime > $Time ]
非常典型的,週期性的
請參新手導航

filetime有2006-01,2006-02,2006-03,2006-04,Time是2006-02,這兩個都沒有問題的,就是在比較的時候後出了問題,我就不明白為什麼filetime怎麼老大於Time。

-->


我做了測試,的確在一直返回0,
[xmkf_A14]:/home/narmis/>test 2006-2 > 2006-1
[xmkf_A14]:/home/narmis/>echo $?
0
[xmkf_A14]:/home/narmis/>test 2006-2 < 2006-1
[xmkf_A14]:/home/narmis/>echo $?
0


用lt和gt來做比較符,返回的才是對的.
[xmkf_A14]:/home/narmis/>test 2006-2 -gt 2006-1
[xmkf_A14]:/home/narmis/>echo $?
1
[xmkf_A14]:/home/narmis/>test 2006-2 -lt 2006-1
[xmkf_A14]:/home/narmis/>echo $?
0

謝謝各位了。
正確的應該是比較是:if [[ $filetime -lt $Time ]],也可以用if [[ $filetime < $Time ]]
這個問題在新手導航裡面就有了。嘿嘿



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 藍森林網站 版權所有。 E-mail : webmaster@lslnet.com