|
藍森林 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 ]]
這個問題在新手導航裡面就有了。嘿嘿 |
| |