如何將所有子目錄移至目前目錄?

如何將所有子目錄移至目前目錄?

我是 shell 腳本程式設計的新手。假設我們有這樣的文件層次結構:

/A/B/C/D
/A/B/E/F/G
/A/H/I
/A/H/J/K

請注意,這裡我們不僅有/A/B/..,而且還有/A/H/...。所有信件都是目錄。我們希望將層次結構轉換為:

/A/B/C
/A/B/D
/A/B/E
/A/B/F
/A/B/G
/A/H/I
/A/H/J
/A/H/K

也就是說,將深度大於二的所有目錄(目錄 A 的深度為零)移到深度二。我可以使用JAVA和C來實現它,但是它們有點太慢了。有人知道如何使用shell腳本來實現它?

偽代碼如下:

for each directory D in current directory A // A may have more than one subdirectories
    for each directory d in D
        for each object in d
            if object is a directory
                move object and all descendant subdirectories of object to /A/D;
            end if
        end for
    end for
end for

答案1

for dir in /A/*; do
    find "$dir" -mindepth 2 -depth -type d -exec mv -t "$dir" -- {} +
done

這指示以深度優先 ( )find的方式搜尋 ( -type d) 下至少 2 層的所有目錄 ( )。對於它找到的每個對象,它都會運行。與往常一樣,不允許您將來源目錄合併到現有的目標目錄中(但有一些解決方法)。-mindepth 2$dir-depthmv -t "$dir" -- <SRC>mv

相關內容