У меня есть файл с именем 042dasd | .txt
, и я хочу удалить все нечисловые символы из его имени, поэтому на выходе будет 042 .txt
. Кстати, как я могу сделать это для многих файлов? Я пробовал использовать регулярное выражение, но думаю, что я не прав.
$ mv 042dasd|.txt # to 042.txt
И пример для многих файлов
mv *.txt # remove all numbers from file names
Заменить/удалить все нецифровые числа до последней точки.
$ rename -n 's/[^0-9](?![^.]*$)//g' *[0-9]*.txt
Удалите -n, после чего можно будет действовать.
Если в вашей системе не установлена команда 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
.