深さ基準に基づいてファイルを1つのディレクトリに移動

深さ基準に基づいてファイルを1つのディレクトリに移動

次のディレクトリツリーがあります(簡単に言えば、文字通り何百ものフォルダがあります)。

.
├── a
│   └── b
│       └── a.h5
├── b
│   ├── b
│   │   └── e.h5
│   └── c
│       ├── a.h5
│       └── b.h5
├── c
│   └── b
│       └── a.h5
├── d
│   ├── a.h5
│   └── e.h5
└── e
    └── e.h5

デフォルトでは、一部の.h5ファイルは深さが1(たとえばd/a.h5、、e/e.h5)、一部のファイルは深さが2(たとえばb/b/e.h5, b/c/b.h5、...)です。

次のように、深さ2のファイルをすべて深さ1にするように移動したいと思います。

.
├── a
│   └── a.h5
├── b
│   ├── e.h5
│   ├── a.h5
│   └── b.h5
├── c
│   └── a.h5
├── d
│   ├── a.h5
│   └── e.h5
└── e
    └── e.h5

私はこれが*/*/*.h5(テストを通して)私が興味のあるファイルと一致することを知っていますがls */*/*.h5、試してみたmv */*/*.h5 */*.h5ところ混乱しました。

重複ファイルは名前を変更するのが最適ですが、ヒントも機能します。どうすればいいですか?

PS:私が見たものは次のとおりです。

しかし、それらはすべて単一のディレクトリで動作します。

ベストアンサー1

これが開始でなければなりません:

find . -mindepth 3 -maxdepth 3 -type f -execdir mv -i -v {} .. \;

mv -i既存のファイルの上書きを要求します。-execdirコマンドを実行する前に、ファイルのディレクトリを変更してください。

おすすめ記事