Linux Массовое переименование файлов в определенной позиции

Esc n дд. n — количество строк для удаления, включая текущую строку. Нажмите кнопку «Esc», затем «n», а затем «dd». Для лучшего понимания

0
29.11.2019, 16:33
3 ответа

Если у вас нет доступного rename, вы можете попробовать следующий цикл (Bash ), который используетsed:

user@host$ for FILE in *.txt; do NEWNAME=$(sed 's/_20190629/_20191129/' <<< "$FILE"); mv "$FILE" "$NEWNAME"; done

Обратите внимание, что для этого требуется Bash. Если у вас другая оболочка, вам придется прибегнуть к чему-то вроде

user@host$ for FILE in *.txt; do NEWNAME=$(echo "$FILE" | sed 's/_20190629/_20191129/'); mv "$FILE" "$NEWNAME"; done

Также обратите внимание, что это предполагает, что имена файлов «достаточно хорошо -ведут себя», поэтому специальные символы (, не являющиеся частью вашего примера ), могут привести к сбою.

1
28.01.2020, 02:38

С переименованием Ларри Уолла(rename(Debian, Ubuntu )илиprename(RHEL/CentOS)):

rename -n s/_20190629/_20191129/ neif11_fastcredit_20190629*.txt

-n— это всего лишь переключатель «пробного прогона». Удалите или замените на -vдля фактического использования.

0
28.01.2020, 02:38

Использование mvи петли:

for f in neif11_fastcredit_20190629*.txt; do
  mv "$f" "neif11_fastcredit_201911${f##*_201906}"
done

Часть ${f##*_201906}удаляет самый длинный соответствующий префикс neif11_fastcredit_201906из каждого имени файла и оставляет часть DDHHMMSS.txtв качестве суффикса нового имени файла.

0
28.01.2020, 02:38

Теги

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