Показать полную графическую версию : [решено] Оставить рандомный файл в папках
Добрый день. Помогите пожалуйста. Требуется рукурсивно оставить в подпапках один рандомный файл (все файды - jpg), а остальные удалить. Желательно, но не обязательно, с указанием корневой папки. То есть, указываем имя папки и изо всех подпапок удаляются все файлы кроме одного рандомного. Заранее спасибо.
MI-5, глубинный смысл сего действа?
Iska, Есть десять тысяч папок, в каждой по сто-двести файлов. Надо оставить по одному примеру изображения из каждой папки, а остальные удалить. А просматривать миллион изображений вручную нет никакого ни желания, ни времени.
MI-5, это ни о чём. Зачем в таком случае нужно вообще что-то оставлять?! Shift-Del, и дело с концом.
Пока что неубедительно.
Iska, Ну проблема у меня такая. Надо мне оставить один файл в каждой подпапке. Чтобы нажать Shift+Del, надо зайти в каждую из десяти тысяч папок, нажать Ctrl+A, а потом снять выделение с одного файла, а уж только после всего этого нажать Shift+Del. Это то же самое, что вручную просмотреть все эти папки. Я не пытаюсь никого ни в чём убедить - зачем мне это надо? Мне надо решить стоящую передо мной проблему - я спросил здесь.
Я нашёл решение, позволяющее переместить рандомный файл из папки в другую папку: mix2stix. Но это не рекурсивно и мне надо в дальнейшем каждый оставшийся файл переименовать в название родительского каталога. Но это уже в дальнейшем вручную будет. Сейчас же вопрос стоит как оставить один файл в папке.
Iska, Ну проблема у меня такая. »
Я не пытаюсь никого ни в чём убедить - зачем мне это надо? Мне надо решить стоящую передо мной проблему - я спросил здесь. »
MI-5, проблема у Вас с тем, что Вы уже выбрали решение для неизвестной задачи, каковое и озвучили. Саму задачу описывать не хотите, зачем надо — не пишете, отделываясь общими фразами.
Чтобы нажать Shift+Del, надо зайти в каждую из десяти тысяч папок, »
Я не предлагал Вам ходить по десяти тысячам папок. Я предлагал нажать Shift-Del на головной папке, и закрыть проблему парой нажатий клавиш в целом: какая разница — оставлять по одному случайному файлу, или не оставлять вовсе.
Я делаю раздачу на трекер. По одному файлу в каждой папке надо для примеров.
Я предлагал нажать Shift-Del на головной папке, и закрыть проблему парой нажатий клавиш в целом: какая разница — оставлять по одному случайному файлу, или не оставлять вовсе. »Тут даже сказать нечего.
Я делаю раздачу на трекер. По одному файлу в каждой папке надо для примеров. »
Предлагаю сделать иное, нежели удаление. А именно — воссоздать всю структуру каталогов в отдельном каталоге того же раздела, затем создать по одной жёсткой ссылке в каждом каталоге-дубликате на файл из оригинального каталога. Таким образом, дополнительного места эти файлы занимать не будут.
На PowerShell:
$sSourceFolder = 'C:\Мои проекты\0142'
$sDestFolder = 'C:\Мои проекты\0143'
if(Test-Path -Path $sSourceFolder -PathType Container) {
@(Get-Item -Path $sSourceFolder) + (Get-ChildItem -Path $sSourceFolder -Directory -Recurse) | `
ForEach-Object -Process {
$cFiles = $_.GetFiles()
if($cFiles.Count -gt 0) {
$sNewFolder = $_.FullName.Replace($sSourceFolder, $sDestFolder)
$oNewFolder = New-Item -ItemType Directory -Path (Split-Path -Path $sNewFolder -Parent) -Name (Split-Path -Path $sNewFolder -Leaf)
$oFile = $cFiles[$(Get-Random -Maximum ($cFiles.Count - 1))]
New-Item -ItemType HardLink -Path $sNewFolder -Name $oFile.Name -Value $oFile.FullName | Out-Null
}
}
}Каталог назначения не должен существовать.
Затем можете начинать раздавать новосозданную структуру каталогов с одиночными случайными файлами.
Таким образом, дополнительного места эти файлы занимать не будут. »
Из объяснений MI-5 я понял так, у него лежит набор скриншотов из фильмов, которые он раздаёт — и ему весь этот набор и нафиг не нужен, а лишь по одному файлу как пример. И тогда после создания каталога с жёсткими ссылками можно удалить весь исходный каталог, в результате чего жесткие ссылки превратятся в исходные независимые одиночные файлы. :)
mwz, всяко может быть. Про torrent удалось вытянуть токмо к седьмому сообщению. Попробуй разберись тут :). Не хочется гадать.
И тогда после создания каталога с жёсткими ссылками можно удалить весь исходный каталог, в результате чего жесткие ссылки превратятся в исходные независимые одиночные файлы. »
Ну, вот, спалили :lol:.
Спасибо за PowerShell. Приду домой - попробую. Исходные файлы не нужны. Примеры нужны только чтобы залить на тот же fastpic.ru. В крайнем случае, забекаплю исходные каталоги. Просто честно не понимаю - какое значение имеет написание тут цели всех этих операций!
Просто честно не понимаю - какое значение имеет написание тут цели всех этих операций! »
Зачастую — существенное и определяющее, коллега.
Iska, простите - не понял. Запускаю в PowerShell, создаётся структура папок и всё. А где сами файлы?
Требуется рукурсивно оставить в подпапках один рандомный файл (все файды - jpg) а остальные удалить»
Если вам не принципиально решать вашу задачу скриптами, то могу порекомендовать воспользоваться сторонней утилитой - Bulk Rename Utility (http://www.bulkrenameutility.co.uk/Download.php). Она маленькая и может быть скачана в портативном виде.
Выполнять инструкцию нужно пошагово и точно: основные пункты настроек выделены желтым цветом, секции, возле которых стоит номер, должны соответствовать скринам.
https://i.imgur.com/sy5QlfI.png
Перед тем, как нажать кнопочку переименовать, не забудьте: Action - Select All
https://i.imgur.com/SxRZaJQ.png
Перед тем, как нажать кнопочку переименовать (на этом этапе переместить в нужную вам папку, пункт 2 на скрине), не забудьте: Action - Select All
Все. В исходном каталоге осталось то, что вам нужно. Перемещенное можете удалить в два клика.
Казбек, Чёрт ногу сломит с рандомным выбором. В предложенном Вами варианте получаем в итоге первый файл в папке с именем 9. Пока через раз получается (Action-Random Sort), но это как-раз то, что нужно. Думаю, на десятитысячной папке привыкну)) Спасибо.
Запускаю в PowerShell, создаётся структура папок и всё. »
Покажите, как это выглядит.
А где сами файлы? »
Должны быть внутри.
Iska, Просто названия исходных папок. Папки пустые. К примеру, были папки 1,2,3. В результате выполнения скрипта в результирующей папке создаются те же самые пустые папки 1,2,3, но пустые. Удаляю исходные - просто удаляются. Уж и Windows Management Framework, и PowerShell обновлял - безрезультатно. Ну да ладно. Делаю по инструкции Казбека. Спасибо за помощь.
Там у Казбека я делаю даже проще: просто переименовываю не сквозной нумерацией, потом в Total Commander'e Ctrl+B и удаляю все не девятки. В итоге остаётся по одному искомому файлу в папке. Задача решена.
MI-5, я просил:
Покажите, как это выглядит. »
не «расскажите», а «покажите». Как выглядит Ваш код. Как выглядит его запуск. Что при этом происходит в среде исполнения — окне консоли PowerShell или окне PowerShell ISE.
Iska, Код копипастил у Вас с первой страницы. Скрипт выполняется без ошибок, но папки пустые. Всё, опытным путём удалось установить, что проблема в квадратных скобках в имени подпапок. Если заменить на круглые или совсем удалить - скрипт работает правильно. Ещё раз спасибо.
MI-5, оттого-то я и просил Ваш код и процесс исполнения, дабы увидеть Ваши пути.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.