Command-Line

合併兩個目錄而不復製文件

  • August 27, 2017

假設我有以下內容:

Folder A
   C1
       file a
   A2

Folder B
    C1
    B2
        file b
    B3

我想要的是合併這兩個文件夾,這會給我:

Folder C
   C1
   A2
   B2
   B3

注意我沒有寫file aand file b。我只想合併架構。每個儲存庫都包含不同的文件,我不希望將它們添加到合併目錄中。因此,mv Folder\ A/* Folder\ B是不夠的。

你們有辦法嗎?

好吧,你可以有findexec mkdir

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 BFolder 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'

引用自:https://unix.stackexchange.com/questions/89501