PDA

Показать полную графическую версию : [решено] Оставить рандомный файл в папках


MI-5
02-01-2018, 08:54
Добрый день. Помогите пожалуйста. Требуется рукурсивно оставить в подпапках один рандомный файл (все файды - jpg), а остальные удалить. Желательно, но не обязательно, с указанием корневой папки. То есть, указываем имя папки и изо всех подпапок удаляются все файлы кроме одного рандомного. Заранее спасибо.

Iska
02-01-2018, 09:05
MI-5, глубинный смысл сего действа?

MI-5
02-01-2018, 09:16
Iska, Есть десять тысяч папок, в каждой по сто-двести файлов. Надо оставить по одному примеру изображения из каждой папки, а остальные удалить. А просматривать миллион изображений вручную нет никакого ни желания, ни времени.

Iska
02-01-2018, 09:56
MI-5, это ни о чём. Зачем в таком случае нужно вообще что-то оставлять?! Shift-Del, и дело с концом.

Пока что неубедительно.

MI-5
02-01-2018, 10:02
Iska, Ну проблема у меня такая. Надо мне оставить один файл в каждой подпапке. Чтобы нажать Shift+Del, надо зайти в каждую из десяти тысяч папок, нажать Ctrl+A, а потом снять выделение с одного файла, а уж только после всего этого нажать Shift+Del. Это то же самое, что вручную просмотреть все эти папки. Я не пытаюсь никого ни в чём убедить - зачем мне это надо? Мне надо решить стоящую передо мной проблему - я спросил здесь.

Я нашёл решение, позволяющее переместить рандомный файл из папки в другую папку: mix2stix. Но это не рекурсивно и мне надо в дальнейшем каждый оставшийся файл переименовать в название родительского каталога. Но это уже в дальнейшем вручную будет. Сейчас же вопрос стоит как оставить один файл в папке.

Iska
02-01-2018, 10:38
Iska, Ну проблема у меня такая. »
Я не пытаюсь никого ни в чём убедить - зачем мне это надо? Мне надо решить стоящую передо мной проблему - я спросил здесь. »
MI-5, проблема у Вас с тем, что Вы уже выбрали решение для неизвестной задачи, каковое и озвучили. Саму задачу описывать не хотите, зачем надо — не пишете, отделываясь общими фразами.

Чтобы нажать Shift+Del, надо зайти в каждую из десяти тысяч папок, »
Я не предлагал Вам ходить по десяти тысячам папок. Я предлагал нажать Shift-Del на головной папке, и закрыть проблему парой нажатий клавиш в целом: какая разница — оставлять по одному случайному файлу, или не оставлять вовсе.

MI-5
02-01-2018, 10:48
Я делаю раздачу на трекер. По одному файлу в каждой папке надо для примеров.
Я предлагал нажать Shift-Del на головной папке, и закрыть проблему парой нажатий клавиш в целом: какая разница — оставлять по одному случайному файлу, или не оставлять вовсе. »Тут даже сказать нечего.

Iska
02-01-2018, 12:14
Я делаю раздачу на трекер. По одному файлу в каждой папке надо для примеров. »
Предлагаю сделать иное, нежели удаление. А именно — воссоздать всю структуру каталогов в отдельном каталоге того же раздела, затем создать по одной жёсткой ссылке в каждом каталоге-дубликате на файл из оригинального каталога. Таким образом, дополнительного места эти файлы занимать не будут.

На 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
}
}
}Каталог назначения не должен существовать.

Затем можете начинать раздавать новосозданную структуру каталогов с одиночными случайными файлами.

mwz
02-01-2018, 12:41
Таким образом, дополнительного места эти файлы занимать не будут. »

Из объяснений MI-5 я понял так, у него лежит набор скриншотов из фильмов, которые он раздаёт — и ему весь этот набор и нафиг не нужен, а лишь по одному файлу как пример. И тогда после создания каталога с жёсткими ссылками можно удалить весь исходный каталог, в результате чего жесткие ссылки превратятся в исходные независимые одиночные файлы. :)

Iska
02-01-2018, 13:21
mwz, всяко может быть. Про torrent удалось вытянуть токмо к седьмому сообщению. Попробуй разберись тут :). Не хочется гадать.

И тогда после создания каталога с жёсткими ссылками можно удалить весь исходный каталог, в результате чего жесткие ссылки превратятся в исходные независимые одиночные файлы. »
Ну, вот, спалили :lol:.

MI-5
02-01-2018, 13:51
Спасибо за PowerShell. Приду домой - попробую. Исходные файлы не нужны. Примеры нужны только чтобы залить на тот же fastpic.ru. В крайнем случае, забекаплю исходные каталоги. Просто честно не понимаю - какое значение имеет написание тут цели всех этих операций!

Iska
02-01-2018, 14:40
Просто честно не понимаю - какое значение имеет написание тут цели всех этих операций! »
Зачастую — существенное и определяющее, коллега.

MI-5
02-01-2018, 16:44
Iska, простите - не понял. Запускаю в PowerShell, создаётся структура папок и всё. А где сами файлы?

Казбек
02-01-2018, 20:49
Требуется рукурсивно оставить в подпапках один рандомный файл (все файды - 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

Все. В исходном каталоге осталось то, что вам нужно. Перемещенное можете удалить в два клика.

MI-5
02-01-2018, 23:59
Казбек, Чёрт ногу сломит с рандомным выбором. В предложенном Вами варианте получаем в итоге первый файл в папке с именем 9. Пока через раз получается (Action-Random Sort), но это как-раз то, что нужно. Думаю, на десятитысячной папке привыкну)) Спасибо.

Iska
03-01-2018, 01:41
Запускаю в PowerShell, создаётся структура папок и всё. »
Покажите, как это выглядит.

А где сами файлы? »
Должны быть внутри.

MI-5
03-01-2018, 08:03
Iska, Просто названия исходных папок. Папки пустые. К примеру, были папки 1,2,3. В результате выполнения скрипта в результирующей папке создаются те же самые пустые папки 1,2,3, но пустые. Удаляю исходные - просто удаляются. Уж и Windows Management Framework, и PowerShell обновлял - безрезультатно. Ну да ладно. Делаю по инструкции Казбека. Спасибо за помощь.

Там у Казбека я делаю даже проще: просто переименовываю не сквозной нумерацией, потом в Total Commander'e Ctrl+B и удаляю все не девятки. В итоге остаётся по одному искомому файлу в папке. Задача решена.

Iska
03-01-2018, 08:18
MI-5, я просил:
Покажите, как это выглядит. »
не «расскажите», а «покажите». Как выглядит Ваш код. Как выглядит его запуск. Что при этом происходит в среде исполнения — окне консоли PowerShell или окне PowerShell ISE.

MI-5
03-01-2018, 09:26
Iska, Код копипастил у Вас с первой страницы. Скрипт выполняется без ошибок, но папки пустые. Всё, опытным путём удалось установить, что проблема в квадратных скобках в имени подпапок. Если заменить на круглые или совсем удалить - скрипт работает правильно. Ещё раз спасибо.

Iska
03-01-2018, 12:03
MI-5, оттого-то я и просил Ваш код и процесс исполнения, дабы увидеть Ваши пути.




© OSzone.net 2001-2012