
したがって、複数のサブディレクトリがあり、そのほとんどはファイルが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
今はDIR D
空なので削除する必要がありますが、DIR C
2つ以上のファイルが含まれているので、そのままにしてください。
できることはありますか?それとも特別なプログラミングコードを書く必要がありますか?
ありがとう
答え1
ディレクトリツリーをGNU find
ナビゲートしながら情報を収集するユーティリティを使用します。 -深度オプションを使用すると、findはツリーの深さ優先巡回を実行し、正確に1つの一般的なファイルを格納するディレクトリの名前を取得します。次に、ファイルを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