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