В zsh:
mv dir1/*/**/*(.D) dir1
**/
подкаталоги пересечений рекурсивно. Спецификатор шарика .
соответствия регулярные файлы только, и D
гарантирует, что точечные файлы включены (по умолчанию, файлы, имя которых запускается с a .
исключены из подстановочных соответствий). Для чистки теперь пустых каталогов впоследствии работать rmdir dir1/**/*(/Dod)
— /
ограничивает каталогами, и od
заказывает глубину соответствий сначала, чтобы удалить dir1/dir2/dir3
прежде dir1/dir2
.
Если общая длина имен файлов является очень большой, можно столкнуться с ограничением на длину командной строки. Zsh имеет builtins для mv
и rmdir
которые не затронуты этим ограничением: выполненный zmodload zsh/files
включить им.
Только с инструментами POSIX:
find dir1 -type f -exec mv {} dir1 \;
find dir1 -depth -exec rmdir {} \;
или (быстрее, потому что это не должно выполнять отдельный процесс для каждого файла),
find dir1 -type f -exec sh -c 'mv "$@" dir1' _ {} +
find dir1 -depth -exec rmdir {} +
Система выберет первый диск, который имеет достаточно пространства для размещения запроса разделения. Если бы Вы попытались создать раздел большего размера, чем свободное место на sdb, то это выбрало бы sdd (принимающий sdd, имел достаточное пространство), автоматически. При выборе раздела, больше, чем sdb могут обработать и не позволяют sdd, он не позволит Вам создать раздел. Другими словами, это делает точно, что говорит описание, которое Вы отправили.