Переупорядочивание подстрок в имени файла при переименовании файлов в bash?

этот интерфейс командной строки удалит все файлы в каталоге /etc/yum.repos.d, исключит файлы, а также распечатает удаленные файлы

ssh "root@$IP" "find  /etc/yum.repos.d ! -name local.repo ! -name redhat.repo ! -name cluster.repo    -type f -delete -print"
1
04.05.2021, 14:31
2 ответа

Используйте инструмент perl rename (, в зависимости от вашей операционной системы, который может называться rename, perl-renameили prename):

.
rename 's/(results)(_[0-9]{8})(.*)(\.txt)/$1$3$2$4/' results*txt

Используйте флаг-n-для пробного прогона, показывающего вам переименования.

Как это работает:

  • s/A/B/-заменить шаблон A шаблоном B в именах файлов
  • Шаблонам в скобках присваивается порядковый номер по мере их появления
  • Группы :1)results:буквально "результаты" ; 2)_[0-9]{8}:символ подчеркивания, за которым следуют 8 цифр от 0 до 9; 3).*.=любой символ, *=повторить предыдущую запись как можно больше, т.е. последовательность любых символов ; 4)\.txtбуквально ".txt", .нужно экранировать, иначе будет "любой символ", как в (3)
  • Измените порядок групп паттернов по желанию, ссылка на$<ID>
2
28.07.2021, 11:35

Вы не упомянули свою ОС, поэтому сложно предположить, какие инструменты могут быть вам доступны. Я нахожу mmvсамым простым для подобных случаев. Он использует оболочки вместо регулярных выражений :

.
$ mmv -n 'results_*_*_*_*.txt' 'results_#2_#4_#3_#1.txt'
results_20210503_input003_run017_cluster003.txt -> results_input003_cluster003_run017_20210503.txt

Удалите -n, если вас устраивают предложенные пере -имена.


Если вам действительно нужно это сделать "в bash ", то

for f in results_*.txt; do 
  IFS=_ read -a elems <<<"${f%.txt}"
  echo mv -n "$f" "results_${elems[2]}_${elems[4]}_${elems[3]}_${elems[1]}.txt"
done
mv -n results_20210503_input003_run017_cluster003.txt results_input003_cluster003_run017_20210503.txt

Удалите echo, чтобы действительно переименовать файлы.

0
28.07.2021, 11:35

Теги

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