этот интерфейс командной строки удалит все файлы в каталоге /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"
Используйте инструмент 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 в именах файлов results
:буквально "результаты" ; 2)_[0-9]{8}
:символ подчеркивания, за которым следуют 8 цифр от 0 до 9; 3).*
.=любой символ, *=повторить предыдущую запись как можно больше, т.е. последовательность любых символов ; 4)\.txt
буквально ".txt", .
нужно экранировать, иначе будет "любой символ", как в (3)$<ID>
Вы не упомянули свою ОС, поэтому сложно предположить, какие инструменты могут быть вам доступны. Я нахожу 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
, чтобы действительно переименовать файлы.