Command-Line
合併兩個目錄而不復製文件
假設我有以下內容:
Folder A C1 file a A2 Folder B C1 B2 file b B3
我想要的是合併這兩個文件夾,這會給我:
Folder C C1 A2 B2 B3
注意我沒有寫
file a
andfile b
。我只想合併架構。每個儲存庫都包含不同的文件,我不希望將它們添加到合併目錄中。因此,mv Folder\ A/* Folder\ B
是不夠的。你們有辦法嗎?
好吧,你可以有
find
execmkdir
。cd /A/ find -type d -exec mkdir -p /C/{} \;
或者如果結構是平的,如您的範例所示,沒有
find
cd /A/ for dir in */ do mkdir -p /C/"$dir" done
在這兩種情況下,對於
cd /B/
.
如果您只想創建相同的目錄結構,您可以呼叫
find
遍歷每個現有的目錄樹,並mkdir
在每個子目錄上使用正確的參數呼叫。呼叫mkdir -p
以靜默跳過已經存在的目錄。cd 'Folder A' find . -type d -exec mkdir -p '/path/to/Folder C/{} '\; cd 'Folder B' find . -type d -exec mkdir -p '/path/to/Folder C/{} '\;
Folder A
在 zsh 中,假設Folder B
和Folder C
是同一目錄的子目錄:mkdir -p Folder\ [AB]/**/*(/e\''REPLY=Folder\ C/${REPLY#*/}'\')
如果你想重現具有文件權限的目錄層次結構,你可以呼叫 rsync,並給它一個只包括目錄而不包括正常文件的過濾器。確保
/
在源目錄的末尾包含 a ,以便直接複製其內容/path/to/Folder C
而無需創建/path/to/Folder C/path/to/Folder A
等。rsync -a --include='*/' --exclude='*' '/path/to/Folder A/' '/path/to/Folder B/' '/path/to/Folder C'