PowerShell и систематизация файлов

Дурацкое название, но что-то лучше ничего не придумалось.

Очень быстро покажу пару скриптов, которыми я постоянно пользуюсь для поддержания моей коллекции обоев с deviantArt в относительном порядке.

Для начала, хочется заметить, что в общем случае имя файла генерируется сервером в виде my_picture_s_name_by_awesome_me.jpg, т.е. название + by + имя пользователя, приведённое к виду, пригодному для сохранения в любой файловой системе.

Итак, хранятся все картинки в одной папке – новые в корне, старые – рассортированные по авторам. От скрипта требуется умение автоматически распихивать файлы заданного вида по папкам. Решается тривиально (скрипт был написан очень давно, когда v1.0 только-только вышла и я ещё почти ничего о нём не знал):

$files = Get-ChildItem -Filter "*_by_*.???" | where {$_.GetType() -eq [System.IO.FileInfo]}
$myRegEx = New-Object System.Text.RegularExpressions.Regex('.+_by_(.+)\..{3}', [System.Text.RegularExpressions.RegexOptions]::IgnoreCase)
foreach ($f in $files) {
	$dir = Join-Path $f.Directory $myRegEx.Split($f.Name)[1]
	$destination = Join-Path $dir $f.Name
	if (-not (Test-Path $dir)) { New-Item -ItemType Directory -Path $dir | Out-Null }
	Move-Item -Path $f.FullName -Destination $destination -Force
}

Второй скрипт пришлось придумать только что, поскольку буквально на прошлой неделе к некоторым файлам зачем-то стали приписывать некий набор символов. Пока что я не знаю, зачем он нужен и какой у него формат, эмпирически же известно, что это семисимвольный довесок, начинающийся на d2x или d2y. Пока что будем его обрезать:

ls | where {$_.FullName -Match '.+\-[a-z0-9]{7}\.[a-z]{3,4}'} |
ren -NewName {$_.FullName -Replace '(.+)(\-[a-z0-9]{7})(\.[a-z]{3,4})','$1$3'}

Comments

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *