免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: godmanager
打印 上一主题 下一主题

[已解决]用Shell怎样实现复制软链接文件,并复制其指向的文件 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-04-16 22:26 |只看该作者

回复 #10 godmanager 的帖子

[root@Mylinux tmp]# pwd
/tmp
[root@Mylinux tmp]# ls -l ls*
lrwxrwxrwx 1 root root 7 03-17 07:36 ls1 -> /bin/ls
lrwxrwxrwx 1 root root 5 03-17 08:10 ls2 -> ./ls1
[root@Mylinux tmp]# find . -type l -name "ls2" -exec ls -l {} \; |awk '{if (system("[ -L "$NF" ]")) system("cp "$NF" /dir2;cp -a "$(NF-2)" /dir2");else print "Target file is also a link"}'
Target file is also a link

论坛徽章:
1
摩羯座
日期:2015-01-08 14:01:55
12 [报告]
发表于 2009-04-16 22:27 |只看该作者
啥啥啥?
要求复制链接文件?就是说如果为链接的话,就要把链接和原文件都复制过去???
然后再测试链接文件的原文件是否为链接文件,对不?
那还是用脚本来完成吧……
对于判断后面那个链接文件的原文件是否为链接文件(感觉咋那么拗口啊),我觉得用file来检测比较好。
话说,我的理解对不?
明天再来写脚本了。
哎,awk还是要好好学啊……

论坛徽章:
0
13 [报告]
发表于 2009-04-16 22:34 |只看该作者

回复 #8 ywlscpl 的帖子

感谢ywlscpl兄的回复.

     该脚本在链接文件为非全路径的情况下,应该怎样处理呢?




  1. star@debian-what:~/test$ ls
  2. dir1  dir2
  3. star@debian-what:~/test$ find ./dir1 -type l -name "file_soft" -exec ls -l {} \;
  4. lrwxrwxrwx 1 star star 4 04-16 21:19 ./dir1/file_soft -> file
  5. star@debian-what:~/test$ find ./dir1 -type l -name "file_soft" -exec ls -l {} \; | awk '{ print $NF,$NF-2 }'
  6. file -2
  7. star@debian-what:~/test$ find ./dir1 -type l -name "file_soft" -exec ls -l {} \; | awk '{ print $NF,$(NF-2) }'
  8. file ./dir1/file_soft
  9. star@debian-what:~/test$

复制代码

论坛徽章:
0
14 [报告]
发表于 2009-04-16 22:35 |只看该作者

回复 #12 可恶的 的帖子

理解万岁..

     

论坛徽章:
0
15 [报告]
发表于 2009-04-16 22:37 |只看该作者

回复 #13 godmanager 的帖子

注意括号 $(NF-2)

路径不影响

[ 本帖最后由 ywlscpl 于 2009-4-16 22:45 编辑 ]

论坛徽章:
0
16 [报告]
发表于 2009-04-16 22:42 |只看该作者
预先知道链接有几层
  1. [root@Mylinux tmp]# pwd
  2. /tmp
  3. [root@Mylinux tmp]# ls -l ls*
  4. lrwxrwxrwx 1 root root 7 03-17 07:36 ls1 -> /bin/ls
  5. lrwxrwxrwx 1 root root 5 03-17 08:10 ls2 -> ./ls1
  6. [root@Mylinux tmp]# find . -type l -name "ls2" -exec ls -l {} \; |awk '{if (system("[ -L "$NF" ]")) system("cp "$NF" /tmp/2;cp -a "$(NF-2)" /tmp/2");else system("cp -a "$(NF-2)" /tmp/2;ls -l "$NF"")}' | awk '{system("cp "$NF" /tmp/2/;cp -a "$(NF-2)" /tmp/2/")}'
  7. [root@Mylinux tmp]# cd 2
  8. [root@Mylinux 2]# ls -l
  9. 总计 85
  10. -rwxr-xr-x 1 root root 85296 03-17 08:31 ls
  11. lrwxrwxrwx 1 root root     7 03-17 08:31 ls1 -> /bin/ls
  12. lrwxrwxrwx 1 root root     5 03-17 08:31 ls2 -> ./ls1
复制代码

论坛徽章:
0
17 [报告]
发表于 2009-04-16 22:45 |只看该作者

回复 #15 ywlscpl 的帖子

确实丫,那是一个陷阱..嘻嘻

论坛徽章:
0
18 [报告]
发表于 2009-04-16 22:46 |只看该作者
原帖由 godmanager 于 2009-4-16 22:45 发表
确实丫,那是一个陷阱..嘻嘻


路径怎么会影响到呢?awk取值$(NF-2)就是./dir1/file_soft
你cp ./dir1/file_soft  target_dir 难道命令会失败??

论坛徽章:
0
19 [报告]
发表于 2009-04-16 22:57 |只看该作者

回复 #18 ywlscpl 的帖子

不在本地目录下查找,退到上级目录,或者指定目录寻找..

star@debian-what:/$ pwd
/


star@debian-what:/$ find /tmp -type l -name "ls2" -exec ls -l {} \; |awk '{if (system("[ -L "$NF" ]")) system("cp "$NF" /tmp/2;cp -a "$(NF-2)" /tmp/2");else system("cp -a "$(NF-2)" /tmp/2;ls -l "$NF"")}' | awk '{system("cp "$NF" /tmp/2/;cp -a "$(NF-2)" /tmp/2/")}'
cp: 无法 stat “ls1”: 没有那个文件或目录

star@debian-what:/$ ls tmp/ls* -lh
lrwxrwxrwx 1 star star 7 04-16 22:49 tmp/ls1 -> /bin/ls
lrwxrwxrwx 1 star star 3 04-16 22:49 tmp/ls2 -> ls1

star@debian-what:/$ ls tmp/2 -lh
总计 0
lrwxrwxrwx 1 star star 3 04-16 22:53 ls2 -> ls1

[ 本帖最后由 godmanager 于 2009-4-16 23:02 编辑 ]

论坛徽章:
0
20 [报告]
发表于 2009-04-16 23:02 |只看该作者

回复 #19 godmanager 的帖子

嗯。确实
[root@Mylinux tmp]# find /tmp -type l -name "ls2" -exec ls -l {} \;
lrwxrwxrwx 1 root root 5 03-17 08:10 /tmp/ls2 -> ./ls1

因该也有办法,让awk处理把./ls1的./替换成$(NF-2)文件名前的路径/tmp/
[root@Mylinux tmp]# echo "/tmp/ls2 -> ./ls1" | awk '$NF~/^\./{sub(/\./,gensub(/(.*)\/[^/]*/,"\\1",1,$(NF-2)),$NF);print}'
/tmp/ls2 -> /tmp/ls1

[ 本帖最后由 ywlscpl 于 2009-4-16 23:12 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP