Is there a module/Drush command for updating multiple field settings at once? Just for convenience I wish change all required fields to optional at once.

Is there module or even better, a Drush command supporting module to do so?
I don't think there's a module or anything to do this, as it's quite a specific use case.

However, you could try something like the following in either a custom module's update/install hook. 

Note I've not tested this, but you'll have to tweak it for your use case anyway.

$options = array(
  'entity_type' =&gt; 'node'
);
// Get all field instances that are on nodes
$fields = field_read_instances($options)

// Loop through the fields...
foreach ($fields as $field =&gt; $data) {
  // ...and prune the array to remove any non-required fields
  if ($data['required'] == 0) {
    unset($fields[$field]);
  }
  // $fields now only contains data for required fields attached to nodes
}

// Loop through the remaining fields
foreach ($fields as $field) {
  $instance = array(
    // Provide the default information that field_update_instance requires
    'entity_type' =&gt; $field['entity_type'],
    'bundle' =&gt; $field['bundle'],
    'field_name' =&gt; $field['field_name'],
    // Make your required changes
    'required' =&gt; 0
  );

  // Take the data in the $instance array and pass it through to field_update_instance.
  field_update_instance($instance);
}


You can filter down your selection of fields by passing different options through to field_read_instances() (e.g. if you only want fields attached to the Basic Page content type, the $options array would look like this:

$options = array(
  'entity_type' =&gt; 'node',
  'bundle' =&gt; 'page'
);


As a sidenote, field_update_instance clears the field cache at the end of every call, so if you have a lot of fields, then this might take a while .

Documentation:


field_read_instances();
field_update_instance();