如何搜索里面只有1个文件的子目录并将文件上移一级到父目录

如何搜索里面只有1个文件的子目录并将文件上移一级到父目录

所以我有多个子目录,其中许多子目录只有1个文件,并且文件名与子目录名相同。

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

所以理想的结果应该是:

  1. 两者B.zipD.zip移至DIR A
  2. DIR B现在DIR D是空的,需要删除,而DIR C由于包含超过 1 个文件而被单独保留

是否可以做一些事情或者我需要编写特殊的编程代码?

谢谢

答案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

相关内容