Files
遞歸展平根目錄中的子目錄並維護 1 級子目錄結構
我有一個大型的 n 級目錄,結構如下:
root | subdir1 | sub_subdir1 | ....(n-2 levels)..... | file1 | subdir2 | sub_subdir2 | ....(n-2 levels)..... | file2
我想展平目錄,以便所有 1 級子目錄都包含文件。我還想將 2 級刪除到 (n-1) sub_subdirs,因為它們不包含文件。請注意,子目錄都有不同的名稱。
期望的結果
root | subdir1 | file1 | subdir2 | file2
我發現很多文章解釋了展平目錄的方法,但沒有一個解釋如何以受控方式執行此操作,即
- 通過指定要展平的級別
- 或對根目錄中的所有子目錄遞歸執行
使用 zsh:
cd /root for subdir in subdir* do mv "$subdir"/**/*(.) "$subdir" rm -r "$subdir"/*(/) done
這:
- 更改為“/root”目錄(來自您的範例)
- 循環遍歷每個命名的子目錄
subdir*
(再次來自您的範例:匹配 subdir1 和 subdir1)- 將該子目錄下的(預期的,但會匹配所有的)匹配文件移動到該子目錄中。這使用了 zsh 的
**
遞歸 globbing 特性,然後受 glob 限定符的限制*(.)
,它表示:此目錄中的任何條目都是純文件- 移動文件後,遞歸刪除該子目錄下的每個子目錄;這再次使用了一個 zsh glob 限定符
*(/)
,它表示匹配目錄條目。