Files

如何搜尋只有1個文件的子目錄並將文件上移一步到父目錄

  • February 9, 2021

所以我有多個子目錄,其中許多子目錄只有一個文件,文件名與子目錄名相同。

DIR A
--DIR B
----B.zip
--DIR C
----C2.zip
----C3.zip
--DIR D
----D.zip

所以理想的結果應該是:

  1. 兩者B.zipD.zip搬到DIR A
  2. DIR BandDIR 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

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