Files
如何搜尋只有1個文件的子目錄並將文件上移一步到父目錄
所以我有多個子目錄,其中許多子目錄只有一個文件,文件名與子目錄名相同。
DIR A --DIR B ----B.zip --DIR C ----C2.zip ----C3.zip --DIR D ----D.zip
所以理想的結果應該是:
- 兩者
B.zip
都D.zip
搬到DIR A
DIR B
andDIR D
現在是空的,需要刪除,而DIR C
因為它包含超過 1 個文件而被單獨留下有沒有可能做或者我需要編寫特殊的程式程式碼?
謝謝
我們使用
GNU find
實用程序,它遍歷目錄樹並沿途收集資訊。-depth 選項將使 find 對樹進行深度優先遍歷,我們會找到恰好儲存一個正常文件的目錄名稱。然後我們將該文件向上移動 abd tgen 刪除剛剛清空的目錄。find . -depth ! -name . -type d -execdir \ sh -c ' isFileKnt_1() { test "$(cd "$1" && find . -maxdepth 1 -type f | grep -c /)" -eq 1 } for d do t=$(mktemp -d) isFileKnt_1 "$d" || exit 0 mv "$d"/* "$t"/. rmdir "$d" mv "$t"/* . done ' find-sh {} +
tree -F 在操作之前和之後輸出。
. ├── dirB/ │ └── dirB ├── dirC/ │ ├── file_2 │ └── file_3 └── dirD/ └── dirD
. ├── dirB ├── dirC/ │ ├── file_2 │ └── file_3 └── dirD