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

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

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

2 ответа2

1

Это можно сделать с помощью 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 . Затем вы можете удалить пустые подпапки.

Источник

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. :)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .