Это легко сделать с помощью оболочки Unix. Вот что вы можете сделать с моей собственной оболочкой Hamilton C (включая бесплатную версию ). Вы можете сделать что-то очень похожее с Cygwin bash.
mv *\* .
Если ваша директория действительно огромна, возможно, что из-за слишком длинного символа командной строки Windows не сможет передать дочерний процесс. ( Вызов Windows CreateProcess ограничивает список аргументов символами Unicode 32K.) Но оболочка C не имеет внутренних ограничений, поэтому вы можете перебирать весь список следующим образом:
foreach i ( *\* )
mv $i .
end
К @ MarkAllen выше, этот вид предполагает, что нет повторяющихся имен. Если они есть, более поздние копии в списке перезапишут более старые. Если это проблема, вы можете перебирать файлы, используя mvих, только если вы не перезаписываете. :tОператор является оператором хвост . -eОператор является файл существует тест .
foreach i ( *\* )
if ( -e $i:t ) then
echo -2 $i not moved because it already exists
else
mv $i .
end
end
Это по-прежнему оставляет пустые каталоги, которые, возможно, вам не нужны после того, как они были очищены. Это может быть следующая итерация, если это имеет значение.