shell 菜鸟脚本求教

wine2015 2011-01-20 02:12:49
#!/bin/sh

mkdir tmp
cd tmp
path = pwd
cd ..
fold1=$(echo $1|sed's|\(^[^/]*\).*|\1|')
fold2=$(echo $2|sed's|\(^[^/]*\).*|\1|')

compareFOLD()
{
for file in $1/*
do
if[-d $file]then
compareFOLD $file
elif[-f $file]
then
if[! -L$file]
then
file2=$(echo $file |sed"s|^.[^/]*\(.*\)|$fold2\1|")
diff $file $file2
if[$? -ne 0]
then
cp $file $(path)
fi
fi
fi
done
}

compareFOLD $fold1

比较两个目录,把不同的文件拷贝到临时目录中。 对于 sed流编辑器后的正则很不明白。谢谢
...全文
125 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zi_yun_long 2011-02-28
  • 打赏
  • 举报
回复
tar -cvf test.txt ---压缩

tar -xvf test.gz ---解压
hgdsnow 2011-02-14
  • 打赏
  • 举报
回复
呵呵,研究哈
Yume15 2011-01-26
  • 打赏
  • 举报
回复
楼上的诸位都是高手,可惜我还没到会写脚本的地步...
wine2015 2011-01-25
  • 打赏
  • 举报
回复
大家看看我写的。比较连个文件夹,压缩打包。
#/bin/bash
#Scriptname:mydiff
#确保比较文件夹文件数量相同
mkdir tmp
path=$PWD/tmp
diff -r $1 $2 |grep '^diff' > 777
for file_ in $(awk '{print $3}' 777)
do
cp $file_ ${path}
done
cd tmp
tar -cvzf ../dfile.tgz ./*
cd ..
rm tmp -fr
rm 777 -fr
justkk 2011-01-20
  • 打赏
  • 举报
回复
提取第一个参数的第一个/之前的部分,并赋值给变量fold1
假定第一个参数是a/b/c,那么fold1就是a
wine2015 2011-01-20
  • 打赏
  • 举报
回复
fold1=$(echo $1|sed's|\(^[^/]*\).*|\1|')
整体是什么意思啊。
justkk 2011-01-20
  • 打赏
  • 举报
回复
^[^/]第一个^表示串的开头,第二个^表示非
即不是以/打开的
justkk 2011-01-20
  • 打赏
  • 举报
回复
只知道\1表示前面的()匹配后部分

2,161

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 UNIX文化
社区管理员
  • UNIX文化社区
  • 文天大人
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧