Это легко сделать с помощью оболочки 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
Это все еще оставляет пустые каталоги, которые, возможно, вы не хотите после того, как они были очищены. Это может быть следующая итерация, если это имеет значение.