linux如何删除同名目录,如何在两个目录中删除其中一个目录中同名文件

假设现在有一个目录/mnt/data,还有另外一个目录/opt/data,需要删除/opt/data目录中和/mnt/data目录中的同名文件。

巧妙做法:利用xargs

实例如下:

[root@centos6-vm01 ~]# ll /mnt/data/

total 0

-rw-r--r--. 1 root root 0 Jan 10 23:24 anhui

-rw-r--r--. 1 root root 0 Jan 10 23:24 bobo

-rw-r--r--. 1 root root 0 Jan 10 23:17 huihui

[root@centos6-vm01 ~]# ll /opt/data/

total 0

-rw-r--r--. 1 root root 0 Jan 10 23:25 beijing

-rw-r--r--. 1 root root 0 Jan 10 23:25 bobo

-rw-r--r--. 1 root root 0 Jan 10 23:25 huihui

-rw-r--r--. 1 root root 0 Jan 10 23:25 shanghai

正确做法:

注意,下面命令中的/mnt/data后面不能加/,而/opt/data/后面需要加/

[root@centos6-vm01 ~]# cd /mnt/data && ls -p | grep -v /$ | xargs -I{} rm -f /opt/data/{}

[root@centos6-vm01 data]#

或者:

[root@centos6-vm01 ~]# cd /mnt/data && ls -p | grep -v /$ | xargs -t -I{} rm -f /opt/data/{}

rm -f /opt/data/anhui

rm -f /opt/data/bobo

rm -f /opt/data/huihui

[root@centos6-vm01 data]#

解释:

ls -p 参数将给列出的目录名最后加上/

grep -v 参数指定反选择, /$指定以/结尾的搜索模式,因此该命令将输出不带/结尾的项,也就是只输出/opt/test_a目录中的文件名,不包含子目录。

xargs命令的-I{} 指定用管道传递过来的输入替换后面命令中的{}字符串,重复多次,直至管道没有输入

注:xargs加上 -t 参数,可以看到替换的效果

检查一下,发现上面命令执行后,/opt/data目录下的同名文件已经删除了

[root@centos6-vm01 data]# ll /mnt/data/

total 0

-rw-r--r--. 1 root root 0 Jan 10 23:24 anhui

-rw-r--r--. 1 root root 0 Jan 10 23:24 bobo

-rw-r--r--. 1 root root 0 Jan 10 23:17 huihui

[root@centos6-vm01 data]# ll /opt/data/

total 0

-rw-r--r--. 1 root root 0 Jan 10 23:25 beijing

-rw-r--r--. 1 root root 0 Jan 10 23:25 shanghai

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值