Задать вопрос

Как с помощью Powershell найти в директории файлы по маске и изменить в них определённый текст?

Добрый день, помогите пожалуйста с задачей

Есть папка PREVIEWS, допустим в ней тысячи других папок,
необходимо найти все файлы с расширением svg и имеющие в названии img_
после чего в каждом найденном файле внутри поменять .png на .jpg
  • Вопрос задан
  • 17747 просмотров
Подписаться 7 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
@yellowmew
Cloud infrastructure, monitoring engineer. SRE
1. получим список файлов.
есть два способа :
Get-ChildItem d:\test -Recurse -Filter *img_*.svg

[IO.Directory]::EnumerateFiles('d:\test\','*img_*.svg','AllDirectories')


второй, в вашем случае, вроде должен работать быстрее, поскольку возвращает не объекты FileInfo а только путь файла.

Дальше сразу подаем на конвейер и обрабатываем так как вам надо.
[IO.Directory]::EnumerateFiles('d:\test\','*img_*.svg','AllDirectories') | foreach {(Get-Content $_ -raw) -replace '.png','.jpg' | Set-Content $_) }

вроде так.
вообще не имел дела с таким объемом файлов, и, скорее всего, все таки будет заниматься достаточно много памяти.
Но проверять - вам )
Ответ написан
globuzer
@globuzer
gezgrouvingus progreszive ombusgrander greyderzux
Интересный вопрос, с помощью ПауэрШел и Баша можно сделать это полюбому.

Но еще один из способов, может и не самый лучший, но не сильно сложный, это воспользоваться к примеру TotalCommander, войти в папку нажную, нажать комбинацию клавиш, которая раскрывает рекурсивно все папки и отображает все файлы в этой папке - просто будет перед вами один список (ctrl+b вроде). Потом с помощью макси выбрать файлы с img_ и открывая каждый файл в текстовом редакторе на правку просто автозаменой сделать замену пнг на джпег (типа ctrl+h).
Если таких файлов не много, то это быстро сделать. Слово не много - относительно, сотню файлов можно сделать за пару минут реально.

Но если подумать и написать скрипт на шеле, как и хотите - будет быстрее, но время будет потрачено на написание скрипта.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы