複数のディレクトリから複数のファイルをソース相対の宛先に移動する

複数のディレクトリから複数のファイルをソース相対の宛先に移動する

次のファイル階層を持ちます。

dir
├── dirA
│   └── snapshot
│       └── subdir1
│           └── file1
└── dirB
    └── snapshot
        └── subdir2
            └── file2

各スナップショット/サブディレクトリからファイルを移動し、スナップショットの親ディレクトリを 1 つのコマンドで実行します。次のようになります。

dir
├── dirA
│   └── file1
│   └── snapshot
│       └── subdir1
└── dirB
    └── file2
    └── snapshot
        └── subdir2

試してみましたmv dir/*/snapshot/*/* ../../が、宛先部分../../が作業ディレクトリに相対的であるため、明らかに機能しません。

bash コマンドで可能ですか (bash スクリプトを 1 行も書いたことがないので)?

答え1

@Don_Christ の鋭い観察に基づいて、この回答は編集され、サブシェルが保存されました。

for i in dir/*/snapshot; do
     mv "$i"/*/* "$i"/..
done

関連情報