Я - новичок в рубине и в программировании также и нуждаюсь в помощи с системным вызовом перемещения файла от источника до места назначения как это:
system(mv "#{@SOURCE_DIR}/#{my_file} #{@DEST_DIR}/#{file}")
Действительно ли возможно сделать это в Ruby? Если так, каков правильный синтаксис?
system ("mv # {@ SOURCE_DIR} / # {my_file} # {@ DEST_DIR} / # {file})"
можно заменить на
system ("mv", "# {@ SOURCE_DIR} / # {my_file}", "# {@ DEST_DIR} / # {file}")
, которая снижает вероятность атаки путем внедрения командной строки.
Два способа
Рекомендуемый способ
Вы можете использовать функции из библиотеки File Utils, см. здесь для перемещения файлов например,
mv(src, dest, options = {})
Options: force noop verbose
Moves file(s) src to dest. If file and dest exist on the different disk
partition, the file is copied instead.
FileUtils.mv 'badname.rb', 'goodname.rb'
FileUtils.mv 'stuff.rb', '/notexist/lib/ruby', :force => true # no error
FileUtils.mv %w(junk.txt dust.txt), '/home/aamine/.trash/'
FileUtils.mv Dir.glob('test*.rb'), 'test', :noop => true, :verbose => true
Непослушный способ
Используйте обратные кавычки (запускайте любую строку как команду)
result = `mv "#{@SOURCE_DIR}/#{my_file} #{@DEST_DIR}/#{file}"`
Хорошо, это всего лишь вариант вызова системной команды , но выглядит намного более озорным!
Я рекомендую вам использовать библиотеку побегов Танака акира Вот пример из одного моего приложения:
cmd = Escape.shell_command(['python', Rails::Configuration.new.root_path + '/script/grab.py']).to_s
system cmd
system("mv #{@SOURCE_DIR}/#{my_file} #{@DEST_DIR}/#{file})
должен быть правильный вызов