Directory
辨識兩個不同目錄之間的公共子目錄名稱並刪除它們
我有兩個目錄
dir1
,dir2
其中有數百個子目錄depth 1
。dir1
我只需要dir2
在dir2
. 我不需要比較文件或文件內容。表演diff -qr dir_one dir_two | sort
也產生文件名,我目前不感興趣。
對於您的案例,您可以避免辨識公共目錄,因為
rm -rf
只是忽略不存在的目錄。因此,將
find
所有目錄從以下dir1
位置刪除 就足夠了dir2
:find dir1 -mindepth 1 -maxdepth 1 -type d -printf "dir2/%f\0" |xargs -0 rm -rf --
一些解釋。預設情況下
find
,將列印所有具有完整路徑的目錄,即dir1
. 所以我們-printf
只列印文件名,沒有前導目錄(%f)加上我們要刪除的其他路徑“dir2”。此外,我們使用空字節 ‘\0’ 而不是換行符來終止字元串以使用xarg
選項-0
,這使得所有這些對於帶空格的文件名都是安全的。然後xargs
將讀取標準輸入並rm
通過添加所有字元串作為參數來執行命令。請注意,在實際刪除它們之前,您可以通過添加
echo
僅列印命令來測試您的命令行rm
:find dir1 -mindepth 1 -maxdepth 1 -type d -printf "dir2/%f\0" |xargs -0 echo rm -rf --
僅列出您可以使用的公共目錄,
ls
而不是rm
(添加 2>/dev/null 以忽略不存在的目錄):find dir1 -mindepth 1 -maxdepth 1 -type d -printf "dir2/%f\0" |xargs -0 -r ls -d -- 2>/dev/null