awk system函数处理复制问题

sh/bash/dash/ksh/zsh等Shell脚本
回复
ps3wifi
帖子: 94
注册时间: 2010-01-08 13:09

awk system函数处理复制问题

#1

帖子 ps3wifi » 2020-07-02 14:52

# xing @ xing-Manjaro in ~/tmp [14:49:14]
$ ll
总用量 0
drwxr-xr-x 2 xing xing 6 7月 3 14:21 a1
drwxr-xr-x 2 xing xing 6 7月 3 14:21 b1

# xing @ xing-Manjaro in ~/tmp [14:49:16]
$ ls -l | sed -n '/^d/p' | awk '{print $9}' | awk '{system("cp -rf "$0" file |xargs -n1")}'



# xing @ xing-Manjaro in ~/tmp [14:49:31]
$ ll file
总用量 0
drwxr-xr-x 2 xing xing 6 7月 3 14:49 b1

通过上面awk命令调用system来处理复制,明明有a1和b1两个文件夹但复制后只有b1文件夹存在,a1没有,请教大家这个是那里出现问题
头像
astolia
论坛版主
帖子: 6533
注册时间: 2008-09-18 13:11

Re: awk system函数处理复制问题

#2

帖子 astolia » 2020-07-03 10:04

你这个命令执行了两次cp
第一次是 cp -rf a1 file,由于file不存在,所以把a1复制为file,file里的内容就是a1里的内容
第二次是 cp -rf b1 file,由于file存在,所以把b1复制到file下面
ps3wifi
帖子: 94
注册时间: 2010-01-08 13:09

Re: awk system函数处理复制问题

#3

帖子 ps3wifi » 2020-07-13 17:16

astolia 写了: 2020-07-03 10:04 你这个命令执行了两次cp
第一次是 cp -rf a1 file,由于file不存在,所以把a1复制为file,file里的内容就是a1里的内容
第二次是 cp -rf b1 file,由于file存在,所以把b1复制到file下面
版主如果要想实现同时把a1和b1都复制到file目录下,我先建立file目录提示不能把file自己复制到自己,要想在awk的语句实现该怎么写呢?谢谢版主
ps3wifi
帖子: 94
注册时间: 2010-01-08 13:09

Re: awk system函数处理复制问题

#4

帖子 ps3wifi » 2020-07-14 16:15

翻了一些资料,自己写了一段代码搞定
ls -l |awk '{if($11!="data"){print $11}}END{system("mkdir data")}' |awk '{system ("cp -rf "$0" data")}'
头像
astolia
论坛版主
帖子: 6533
注册时间: 2008-09-18 13:11

Re: awk system函数处理复制问题

#5

帖子 astolia » 2020-07-14 22:52

ps3wifi 写了: 2020-07-14 16:15 翻了一些资料,自己写了一段代码搞定
ls -l |awk '{if($11!="data"){print $11}}END{system("mkdir data")}' |awk '{system ("cp -rf "$0" data")}'
专门的工具做专门的事。awk定位是文本处理工具,system函数就是在调用shell,你这些文件操作直接用shell去处理不行?
另外你这段代码完全没有考虑过文件名中包含空格的特殊情况
回复