免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1851 | 回复: 5
打印 上一主题 下一主题

link 两个目录的shell [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-04-05 18:21 |只看该作者 |倒序浏览
包括目录里的文件及子目录和其下面的文件。并且link后的属主和权限也都一样

学一样东西最好的方法就是去用,我现在对变量替换很熟悉了。

  1. [root@localhost tmp]# cat 1.sh
  2. #!/bin/bash
  3. link_file(){
  4.         local subdir
  5.         local tmp_1 tmp_2 tmp_3 tmp_4 file_name
  6.         local tmp_in_file tmp_out_file
  7.         subdir=$1
  8.         for i in `ls -a $subdir`
  9.         do

  10.                 tmp_in_file=$subdir'/'$i
  11.                 tmp_out_file=$out_dir${subdir#$in_dir}'/'$i
  12.                 if [ -h $tmp_in_file ]
  13.                 then
  14.                         tmp_3=$(LANG='C';ls -l $subdir|awk -v name="$i" '{if ($9==name) print $0}')
  15.                         tmp_4=${tmp_3/l*-> /}
  16.                         case ${tmp_4:0:1} in
  17.                         '/')
  18.                                 ln -s ${tmp_4} $tmp_out_file
  19.                                 ;;
  20.                         '.')
  21.                                 ln -s ${subdir%/*}${tmp_3/l*-> ../} $tmp_out_file
  22.                                 ;;
  23.                         *)
  24.                                 ln -s $tmp_in_file $tmp_out_file
  25.                                 ;;
  26.                         esac
  27.                         file_name=${tmp_3/->*/}
  28.                         eval file_name='('$file_name')'
  29.                         chown ${file_name[2]}':'${file_name[3]} $tmp_out_file
  30.                 else
  31.                         if [ -d $tmp_in_file ]
  32.                         then
  33.                                 if [ $i = . -o $i = .. ]
  34.                                 then
  35.                                         continue
  36.                                 fi
  37.                                 tmp_1="$subdir/$i"
  38.                                 tmp_2="$out_dir${subdir#$in_dir}/$i"
  39.                                 mk_dir "$tmp_1" "$tmp_2"
  40.                                 link_file $subdir'/'$i
  41.                         else
  42.                                 link $tmp_in_file $tmp_out_file
  43.                         fi
  44.                 fi
  45.         done
  46. }
  47. mk_dir(){
  48.         local dir
  49.         local u g o
  50.         local dir_name
  51.         dir_name="${1##*/}"
  52.         eval dir='('$(LANG='C';ls -l ${1%/*}/|awk -v name="$dir_name" '{if ($9==name) print $0}')')'
  53.         mkdir $2
  54.         chown ${dir[2]}':'${dir[3]} $2
  55.         u=${dir[0]:1:3}
  56.         g=${dir[0]:4:3}
  57.         o=${dir[0]:7:3}
  58.         u=${u//-/}
  59.         g=${g//-/}
  60.         o=${o//-/}
  61.         chmod u=$u,g=$g,o=$o $2
  62. }
  63. in_dir=${1%/}
  64. out_dir=${2%/}
  65. if [ -e $out_dir ]
  66. then
  67.         echo "out dir exists"
  68.         exit 1
  69. fi
  70. if [ ! -d $in_dir ]
  71. then
  72.         echo "input is no dir or no exists"
  73.         exit 1
  74. fi
  75. mk_dir $in_dir $out_dir
  76. link_file $in_dir
复制代码

[root@localhost tmp]# ./1.sh /etc /root/ddd
[root@localhost tmp]# find /root/ddd|sed 's#/root/ddd/##g'|sort >/tmp/bb
[root@localhost tmp]# find /etc|sed 's#/etc/##g'|sort >/tmp/aa
[root@localhost tmp]# diff aa bb
91d90
< /etc
1694a1694
> /root/ddd

论坛徽章:
0
2 [报告]
发表于 2005-04-05 18:26 |只看该作者

link 两个目录的shell

介绍一下这个脚本是干什么用的

论坛徽章:
0
3 [报告]
发表于 2005-04-05 18:29 |只看该作者

link 两个目录的shell

link 目录啊,link命令不能link目录,我就写了一个shell完成这个功能

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
4 [报告]
发表于 2005-04-05 19:02 |只看该作者

link 两个目录的shell

lndir是否可行?

论坛徽章:
0
5 [报告]
发表于 2005-04-06 20:18 |只看该作者

link 两个目录的shell

[quote]原帖由 "寂寞烈火"]lndir是否可行?[/quote 发表:

当然可以,但是lndir做的是软链接,我的shell做的是硬链接,而且子目录的属主和权限也都一样。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
6 [报告]
发表于 2005-04-06 20:35 |只看该作者

link 两个目录的shell

原帖由 "whtlly" 发表:

当然可以,但是lndir做的是软链接,我的shell做的是硬链接,而且子目录的属主和权限也都一样。

原来如此! 强就一个字!  
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP