移动经常使用的文件

时间:2014-07-11 11:14:54

标签: bash cp mv solaris-10

我需要移动一直使用的文件(test.log)的全部内容。移动文件可能会导致写入文件的应用程序出错。

我的方法是将输出重定向到test.log_bck,将原始文件(test.log)复制到test.log_cp,清除它,然后检查是否在test.log文件同时添加了任何数据清除。如果_cp文件中缺少任何数据,则将其与_bck文件合并,而不使用冗余数据。这么简单的任务需要付出很多努力,我的问题是:是否有另一种更简单/更有效的方法。

#/usr/bin/bash
#redirect the output to /tmp/logging/test.log_bck
bck(){
        `tail -f /tmp/logging/test.log &> /tmp/logging/test.log_bck`
}

#run it in background
bck &

#copy the original file to test.log_cp
`cp /tmp/logging/test.log /tmp/logging/test.log_cp` | echo "Copped"

#clear the original file
echo "" > /tmp/logging/test.log | echo "Cleared"

#get the PID of the redirection process and check if there are other running and kill them
bck_pid=`ps -ef | grep "tail -f /tmp/logging/test.log" | grep -v grep | awk '{print$2}' | head -1`

while [ "$bck_pid" != "" ]
do
        echo $bck_pid
        kill $bck_pid | echo "Killed"
        bck_pid=`ps -ef | grep "tail -f /tmp/logging/test.log" | grep -v grep | awk '{print$2}' | head -1`
done

date=$(date '+%Y_%m_%d_%H_%M')
cat /tmp/logging/test.log_cp /tmp/logging/test.log_bck > /tmp/logging/test.log_$date

cat -n /tmp/logging/test.log_$date | sort -uk2 | sort -nk1 | cut -f2-

0 个答案:

没有答案