Удалите все нечисловые символы из имени файла

У меня есть файл с именем 042dasd | .txt , и я хочу удалить все нечисловые символы из его имени, поэтому на выходе будет 042 .txt . Кстати, как я могу сделать это для многих файлов? Я пробовал использовать регулярное выражение, но думаю, что я не прав.

$ mv 042dasd|.txt # to 042.txt

И пример для многих файлов

mv *.txt # remove all numbers from file names
0
задан 23 August 2020 в 22:52

2 ответа

Заменить/удалить все нецифровые числа до последней точки.

$ rename -n 's/[^0-9](?![^.]*$)//g' *[0-9]*.txt

Удалите -n, ​​после чего можно будет действовать.

0
ответ дан 24 August 2020 в 08:55

Если в вашей системе не установлена ​​команда rename или вы не хотите ее использовать, можно использовать следующий скрипт bash. используется как альтернатива:

#!/bin/bash
for f in *.* ; do
  ext="${f##*.}"
  bfn="${f%.*}"
  nfn="${bfn//[^0-9]/}"
  echo mv "$f" "$nfn.$ext"
done

Цикл for используется для выполнения кода для каждого файла, соответствующего шаблону *.*. Вы можете изменить шаблон *.* на что-то более подходящее для вас; например, *.txt.

Строка ext="${f##*.}" извлечет расширение имени файла (текст после последнего .). В имени файла вашего примера это будет что-то вроде txt. Примечание. Если имя файла не содержит расширения, этот сценарий может работать не так, как вы хотите. Попробуйте и посмотрите.

Строка bfn="${f%.*}" извлечет базовое имя файла, удалив последнее . и все, что следует за ним.

Строка nfn="${bfn//[^0-9]/}" удалит все нечисловые символы из базового имени файла.

В строке echo mv "$f" "$nfn.$ext" будут отображаться команды move, которые необходимо выполнить. Если вас устраивает вывод, удалите команду echo, чтобы запустить фактические команды mv.

0
ответ дан 24 August 2020 в 08:56

Другие вопросы по тегам:

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