Тебя привлекло это название, не так ли? ЛОЛ.
Проблема: у меня много папок, в которых есть папка, с файлами внутри. Я хочу переместить файлы 2-го уровня на 1-й уровень и сделать это, не зная их имен.
Графически вот что я хочу:
Текущий:
new
└── temp
├── Folder1
│ ├── SubFolder1
│ │ └── SubTest1.txt
│ └── Test1.txt
├── Folder2
│ ├── SubFolder2
│ │ └── SubTest2.txt
│ └── Test2.txt
└── Folder3
├── SubFolder3
│ └── SubTest3.txt
└── Test3.txt
Желаемая:
└── temp
├── Folder1
│ ├── SubFolder1
│ ├── SubTest1.txt
│ └── Test1.txt
├── Folder2
│ ├── SubFolder2
│ ├── SubTest2.txt
│ └── Test2.txt
└── Folder3
├── SubFolder3
├── SubTest3.txt
└── Test3.txt
Если кто-то хотел получить фантазию, что мне не нужно делать, так как позже в моем скрипте я удаляю пустые файлы, но стоит упомянуть на тот случай, если я смогу узнать еще больше:
└── temp
├── Folder1
│ ├── SubTest1.txt
│ └── Test1.txt
├── Folder2
│ ├── SubTest2.txt
│ └── Test2.txt
└── Folder3
├── SubTest3.txt
└── Test3.txt
Я подхожу очень близко, но мне чего-то не хватает, и я уверен, что это просто / глупо. Вот что я бегу:
find . -mindepth 3 -type f -exec sh -c 'mv -i "$1" "${1%/*}"' sh {} \;
Вот что меня заводит:
mv: './1stlevel/2ndlevel/test.rtf' and './1stlevel/2ndlevel/test.rtf' are the same file
На переполнении стека Джордж приблизил меня, дав мне:
find . -mindepth 4 -type f -exec mv {} ./*/* \;
так же как:
mv ./*/*/*/* ./*/*
Команда mv - это, безусловно, путь, поскольку он чище и намного, намного быстрее. Но, увы, хотя он отлично работает с одной папкой, несколько папок превращают это в:
new
└── temp
└── Folder3
├── Folder1
│ ├── SubFolder1
│ └── Test1.txt
├── Folder2
│ ├── SubFolder2
│ └── Test2.txt
├── SubFolder3
├── SubTest1.txt
├── SubTest2.txt
├── SubTest3.txt
└── Test3.txt
Итак, я все ближе, но не совсем там. Какие-либо предложения? Заранее спасибо!