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

假设如今有一个目录/mnt/data,还有另一个目录/opt/data,须要删除/opt/data目录中和/mnt/data目录中的同名文件。
巧妙作法:利用xargshtml

实例以下:linux

[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

正确作法:centos

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

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

或者:htm

[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目录下的同名文件已经删除了get

[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

本文原创地址:https://www.linuxprobe.com/background-linux.htmltest

相关文章
相关标签/搜索