Как в сценарии bash shell переименовать несколько файлов, сохраняя только номера и расширение имен исходных файлов?

try

ip route add 192.168.178.0/24 dev eth0 proto kernel  scope link  src 192.168.122.201

Я очищаю свою основную таблицу маршрутов, устанавливаю статический IP-адрес и сталкиваюсь с этой проблемой.

Я пытаюсь удалить статический IP-адрес, снова читаю, наблюдаю, что было добавлено в таблицу маршрутизации, и нахожу эту запись. Потом добавляю маршрут по умолчанию, работает.

ip a del 192.168.178.201/24 dev eth0
ip a add 192.168.178.201/24 dev eth0
ip route add default via 192.168.178.5 dev eth0
0
08.04.2019, 23:32
3 ответа

Этот простой скрипт должен это сделать:

for f in *[0-9]*.*; do
  base=${f%.*}
  mv -- "$f" "${base//[^0-9]}.${f##*.}"
done
0
28.01.2020, 02:30

Мы можем обойтись ниже одного вкладыша. Протестировал. Но его нужно выполнить из текущей папки, в которой присутствует файл.

for file in *generic*.txt; do newname=$(echo $file | awk -F"-" '{print $3}' | sed 's/ _//g'); mv "$file" $newname;done

если вы хотите запустить из другой папки, вы можете попробовать скрипт ниже

#!/bin/bash


SRCFLDR=yoursourcefolder
for file in $SRCFLDR/*generic*.txt;do
        newname=$(echo $file | awk -F"-" '{print $3}' | sed 's/ _//g')
        mv "$file" $newname
        echo $file has been renamed to $newname
done
0
28.01.2020, 02:30

Perl переименовать

Я бы использовал (perl -)rename. В дистрибутивах есть два типа переименования, поэтому вы можете проверить, установлена ​​ли у вас perl-версия переименования с помощью

$ rename --version
perl-rename 1.9

Запустите его с помощью -n, чтобы проверить команду как «пробный прогон».

$ rename 's/[^0-9]*([0-9]*).*/\1.txt/' * -n
generic name- dd -01 _.txt -> 01.txt
generic name- dd -02 _.txt -> 02.txt
generic name- dd -03 _.txt -> 03.txt
generic name- dd -04 _.txt -> 04.txt

Когда вы будете довольны, запустите саму команду.

$ rename 's/[^0-9]*([0-9]*).*/\1.txt/' *

Пояснение

  • rename 's/foo/bar/' *:переименовать все файлы (*), заменив регулярное выражение fooна bar.
  • [^0-9]*([0-9]*).*:соответствует всем не-числовым символам [^0-9]*, за которыми следуют числовые символы, заключенные в «группу захвата» ([0-9]*), за которыми следуют остальные символы .*. Это будет соответствовать полному имени файла.
  • \1.txt:замените имя файла захваченной группой \1, добавив к ней .txt.

Другое переименование

Если у вас установлено более простое переименование, вместо этого вы увидите нечто подобное.

$ rename --version
rename from util-linux 2.33.1

В этом случае вы можете использовать следующие две команды:

$ rename 'generic name- dd -' '' *
$ rename ' _' '' *

Но вместо этого я настоятельно рекомендую изучить perl -rename.

3
28.01.2020, 02:30

Теги

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