次のディレクトリツリーがあります(簡単に言えば、文字通り何百ものフォルダがあります)。
.
├── 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:私が見たものは次のとおりです。
- https://superuser.com/questions/62141/how-to-move-all-files-from-current-directory-to-upper-directory
- ファイルをディレクトリに安全に一括移動する方法は?
しかし、それらはすべて単一のディレクトリで動作します。
ベストアンサー1
これが開始でなければなりません:
find . -mindepth 3 -maxdepth 3 -type f -execdir mv -i -v {} .. \;
mv -i
既存のファイルの上書きを要求します。-execdir
コマンドを実行する前に、ファイルのディレクトリを変更してください。