次のディレクトリ構造があります。
├── 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