
У меня куча файлов в таких местах:
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
папку. Затем вы можете удалить пустые подпапки.