Можно ли переместить несколько файлов из разных подкаталогов/папок в один основной каталог в Windows?

Можно ли переместить несколько файлов из разных подкаталогов/папок в один основной каталог в Windows?

У меня куча файлов в таких местах:

C:/Users/(Username)/Desktop/(Parent-Collection name)/(filename1)/(filename1).ext

.../(filename2)/(filename2).ext

.../(filename3)/(filename3).ext

Я пытаюсь переместить .extфайлы в родительскую папку пакетным способом:

C:/Users/(Username)/Desktop/(Parent-Collection name)/(filename1).ext

По сути, отпадает необходимость во вложенной папке, как будто убирают разделители из школьной папки.

решение1

Возможно, вам придется сделать это сcygwin, который я бы порекомендовал всем, кто (все еще??) использует шпионскую программу M$ Windoze.

Что-то вроде этого должно работать. Запустите его в каталоге C:/Users/(Username)/Desktop/(Parent-Collection name)/(который в cygwin будет называться /cygdrive/c/Users/(Username)/Desktop/(Parent-Collection name)/):

for i in `find . -name "*" -type f`; 
    do mv $i `echo $i | sed 's/.*\/\([^/]*\)/\1/'`; 
done

Это переместит все файлы во всех каталогах ниже (Parent-Collection name)в (Parent-Collection name). В частности, это doцикл с индексом, iпроходящим по каждому файлу из текущего каталога вниз. Это то, что findперечисляет команда. Вы можете посмотреть синтаксис, запустив man find. Затем вы выполняете перемещение ( mv) этого файла ( $i) в новое местоположение. Это новое местоположение указывается исходным именем файла ( echo $i), запущенным через редактор потока ( sed, который вы можете найти с помощью man sed), который настроен на удаление пути, оставляя базовое имя файла.

Я предлагаю протестировать это (создать каталог с парой подкаталогов, содержащих пустые текстовые файлы или что-то в этом роде) и обязательно сделать резервную копию!

Затем вы можете удалить все (теперь пустые) каталоги ниже вашего текущего каталога:

for i in `find . -name "*" -type d`; 
    do rmdir $i; 
done

Единственное отличие здесь в том, что вы указываете findискать каталоги ( -type d), а не файлы ( -type f), а затем удаляете эти каталоги ( rmdir, что работает только для пустых каталогов).

Разве Linux не крут? Cygwin дает вам часть мощи Linux и может стать первым шагом к тому, чтобы вы достаточно освоились с ним, чтобы однажды вы даже смогли перейти на что-то вроде Ubuntu. :)

решение2

Это можно сделать с помощью Powershell, хотя мы не знаем, какую версию Windows вы используете.

$sourcefolder = "C:\Users\username\Desktop\ParentCollectionName"

$allfiles = Get-ChildItem -Recurse $sourcefolder | Where-Object {$_.PSIScontainer -eq $false}
ForEach ($file in $allfiles)
    {
        $destinationfolder = Split-Path -Parent $file.Directory.FullName
        Move-Item $file.FullName $destinationfolder
    }

Все файлы в подкаталогах $sourcefolderбудут перемещены в ParrentCollectionNameпапку. Затем вы можете удалить пустые подпапки.

Источник

Связанный контент