Перемещение файлов в подпапки -на основе их имени файла, для нескольких подпапок

Если ваши сценарии запуска являются общими и вы хотите, чтобы команда sourceвыполнялась, если это возможно, оберните ее тестом:

[ -r /Infos/bd/config11 ] && source /Infos/bd/config11

В системах без этого файла (, где ваша учетная запись не может прочитать этот путь ), тест завершится неудачно, и вы не получите сообщение об ошибке; в системах с этим файлом (, где вы можете прочитать этот файл ), он будет источником.

Возможно, вам не нужно иметь команду в обоих файлах; см., например, Какова цель.bashrc и как он работает? и/или ваши локальные справочные страницы bash.

0
16.06.2020, 17:46
1 ответ

Вы можете использовать две петли сbash:

cd /path/to/Analysis
shopt -s nullglob
for i in {1..3}; do
  for f in */swu_run${i}_*.nii; do
     mv "$f" "${f%/*}/run${i}/"
  done
done

Включенная опция оболочки nullglobгарантирует, что внутренний цикл не будет запущен, если */swu_run${i}_*.niiне соответствует ни одному файлу (, уже перемещенному или отсутствующему ).

Расширение параметра ${f%/*}удаляет кратчайший шаблон суффикса /*, оставляя путь к родительскому каталогу.

1
18.03.2021, 23:27

Теги

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