как perl скриптом под windows обойти папку с подпапками,

perl

вычислить md5 найденных файлов и отметить в базе mysql при совпадении по md5 в соответствующем поле ? приведите код пжлст

Примечание:
PowerShell можно будет потом перенести на Linux ?
хотелось бы платформонезависимое решение...

Примечание:
глюк с баллами хотел 99 вышло 5 ;(

Примечание:
PetSerAl, давайте попробуем, если интересно.

Примечание:
PetSerAl, можно сделать проще - посчитать md5 и создать из них таблицу в mysql (или файл для импорта в mysql)
таблица допустим такая, из двух полей: счетчик, md5
далее можно уже в самой mysql объединенным запросом выводить совпадение, разницу...

Примечание:
PetSerAl, спасибо, сейчас настрою PowerShell и попробую.
тему пока не закрываю...
Ответы:
>PowerShell можно будет потом перенести на Linux ?
Переносимость не является сильной чертой PowerShell, так что врядли.
>PetSerAl, давайте попробуем, если интересно.
Тогда надо больше информации: что с чем сравнивать, как именно отмечать?
Add-Type -Path Path\To\MySql.Data.dll #MySql.Data.dll файл из MySQL Connector .Net
$ConnectionString=New-Object MySql.Data.MySqlClient.MySqlConnectionStringBuilder
$ConnectionString.ConnectionProtocol="TCP"
$ConnectionString.Server="ServerName"
$ConnectionString.Port=3306
$ConnectionString.UserID="User"
$ConnectionString.Password="Password"
$ConnectionString.Database="Database"
$Connection=New-Object MySql.Data.MySqlClient.MySqlConnection $ConnectionString
$Connection.Open()
$CreateTableCommand=$Connection.CreateCommand()
$CreateTableCommand.CommandText=@'
CREATE TABLE tablename(
    counter INT UNSIGNED AUTO_INCREMENT,
    md5 CHAR(32),
    PRIMARY KEY (counter)
)
'@
$CreateTableCommand.ExecuteNonQuery()`
|Out-Null
$CreateTableCommand.Dispose()
$InsertCommand=$Connection.CreateCommand()
$InsertCommand.CommandText=@'
INSERT tablename SET md5=@md5
'@
$Parameter=New-Object MySql.Data.MySqlClient.MySqlParameter
$Parameter.ParameterName="md5"
$InsertCommand.Parameters.Add($Parameter)`
|Out-Null
$MD5=[Security.Cryptography.MD5]::Create()
Get-ChildItem Path\To\Files <#замените на путь к файлам#> -Recurse `
|Where-Object {
    !($_.PSIsContainer)
}`
|ForEach-Object {
    $Stream=$_.OpenRead()
    $InsertCommand.Parameters["md5"].Value=-join(
        $MD5.ComputeHash($Stream)`
        |ForEach-Object {
            $_.ToString("X2")
        }
    )
    $InsertCommand.ExecuteNonQuery()`
    |Out-Null
    $Stream.Close()
}
$MD5.Clear()
$InsertCommand.Dispose()
$Connection.Close()


14 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.