В https://oracle-base.com/articles/misc/install-sample-schemas. Тим Холл предлагает следующую команду (после размещения в определенном каталоге) для замены строки __SUB__CWD__
именем текущего каталога в файлах sql и dat:
cd ...
perl -p -i.bak -e 's#__SUB__CWD__#'$(pwd)'#g' *.sql */*.sql */*.dat
Как можно адаптировать эту команду для Windows? Даже если имя каталога постоянно (например: C:\app\soutou\product\18.0.0\dbhomeXE\demo\схема). Я не пользователь Perl (разработчик Oracle)
Если вы устанавливаете Клубничный жемчуг в своем окне Windows, эта команда должна работать только из оболочки cmd.com.
perl -i.bak -MCwd -pe"BEGIN{ $cwd = cwd; @ARGV = map glob, @ARGV; } s#__SUB__CWD__#$cwd#g" *.sql *\*.sql *\*.dat
Это может быть далеко, но я помню, что у меня были проблемы с одинарными кавычками. Попробуйте заменить их двойными кавычками: cmd.exe
Спасибо, теперь производит Can't open *.sql: Invalid argument. Can't open *\*.sql: Invalid argument. Can't open *\*.dat: Invalid argument.
@ChristianSoutou См. также этот вопрос
@Hakon Haegland, спасибо, вы правы, он работает с одним именем файла (как test.sql вместо *.sql). Я собираюсь попробовать с Cygwin
Обновлена строка, теперь она должна расширять файловые глобусы.
Он работает с Cygwin, чтобы избежать появления строки (/cygdrive/C) из пути, я скорректировал исходную команду с путем к каталогу Oracle. perl -p -i.bak -e 's#__SUB__CWD__#'C:/oracle_directory...'#g' *.sql */*.sql */*.dat
Для Oracle RDBMS в Windows вы можете использовать вместо метода очистки:
Get-ChildItem -Recurse -Include "*.sql","*.dat" | ForEach-Object { $a = $_.fullname; ( Get-Content $a ) | ForEach-Object { $_ -replace "__SUB__CWD__","<%ORACLE_HOME%>demo\schema" } | Set-Content $a }
* замените <%ORACLE_HOME%>
на ваш Oracle_Home.
Спасибо, но с Active Perl эта команда возвращает
Can't find string terminator "'" anywhere before EOF at -e line 1.