すべてのファイルをサブディレクトリから親ディレクトリに移動する

すべてのファイルをサブディレクトリから親ディレクトリに移動する

次のディレクトリ構造があります。

├── Tom
│   └── c
│       └── 2
│           ├── file.jpg
│           └── text.txt
└── Sam
    ├── 1
    │   └── c
    │       └── music.aac
    ├── E
    │   └── 9
    │       └── pic.jpg
    └── b
        ├── 9
        │   └── sound.aac
        └── d
            └── book.doc

1つのコマンドを使用して、さまざまなサブフォルダ内のすべてのファイルをデフォルトの親フォルダ(Tom、Samなど)に移動し、空のサブフォルダをすべて削除したいと思います。どうすればいいですか?

ありがとう

答え1

なぜ1つのライナーでなければならないのかよくわかりません。しかし、可能性があります。指定されたディレクトリツリーですべてのファイルを見つけ、各ファイルを2つのディレクトリの上に移動します。

find -type f | while read; do mv "$REPLY" "$(dirname $REPLY)/../../"; done

このコマンドは、指定されたディレクトリ構造に対して完全に機能し、他のケースを考慮しないため、注意して使用してください(たとえば、表示されたリーフディレクトリのファイルだけでなく、すべてのディレクトリからファイルを移動します)。

答え2

どうですか?

find Tom Sam -type f | while read FN; do echo mv "$FN" "${FN%%/*}"; done

関連情報