如何在兩個目錄中刪除其中一個目錄中同名文件

假設如今有一個目錄/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

相關文章
相關標籤/搜索