У меня есть эти файлы:
JE.TR21201610011612514806.47250728
JE.TR21201610011613514807.91514463
JE.TR21201610011614514808.4107721050
JE.TR21201610011626514818.3578493139
JE.TR21201610011627514819.1032212591
JE.TR21201610011628514820.3663420052
JE.TR21201610011629514821.3388683091
Как я могу переименовать их к этому?
JE.TR21201610011612514806
JE.TR21201610011613514807
JE.TR21201610011614514808
JE.TR21201610011624514817
JE.TR21201610011626514818
JE.TR21201610011627514819
JE.TR21201610011628514820
JE.TR21201610011629514821
Любой из
$ rename -n 's/\.\d*$//' JE.*
rename(JE.TR21201610011612514806.47250728, JE.TR21201610011612514806)
rename(JE.TR21201610011613514807.91514463, JE.TR21201610011613514807)
rename(JE.TR21201610011614514808.4107721050, JE.TR21201610011614514808)
rename(JE.TR21201610011626514818.3578493139, JE.TR21201610011626514818)
rename(JE.TR21201610011627514819.1032212591, JE.TR21201610011627514819)
rename(JE.TR21201610011628514820.3663420052, JE.TR21201610011628514820)
rename(JE.TR21201610011629514821.3388683091, JE.TR21201610011629514821)
или
$ prename -n 's/\.\d*$//' JE.*
JE.TR21201610011612514806.47250728 renamed as JE.TR21201610011612514806
JE.TR21201610011613514807.91514463 renamed as JE.TR21201610011613514807
JE.TR21201610011614514808.4107721050 renamed as JE.TR21201610011614514808
JE.TR21201610011626514818.3578493139 renamed as JE.TR21201610011626514818
JE.TR21201610011627514819.1032212591 renamed as JE.TR21201610011627514819
JE.TR21201610011628514820.3663420052 renamed as JE.TR21201610011628514820
JE.TR21201610011629514821.3388683091 renamed as JE.TR21201610011629514821
или
$ mmv -n "JE.*.*" JE.#1
JE.TR21201610011612514806.47250728 -> JE.TR21201610011612514806
JE.TR21201610011613514807.91514463 -> JE.TR21201610011613514807
JE.TR21201610011614514808.4107721050 -> JE.TR21201610011614514808
JE.TR21201610011626514818.3578493139 -> JE.TR21201610011626514818
JE.TR21201610011627514819.1032212591 -> JE.TR21201610011627514819
JE.TR21201610011628514820.3663420052 -> JE.TR21201610011628514820
JE.TR21201610011629514821.3388683091 -> JE.TR21201610011629514821
(удалите -n
завершать действие)
или
$ for f in JE.*; do echo mv "$f" "${f%.*([0-9])}"; done
mv JE.TR21201610011612514806.47250728 JE.TR21201610011612514806
mv JE.TR21201610011613514807.91514463 JE.TR21201610011613514807
mv JE.TR21201610011614514808.4107721050 JE.TR21201610011614514808
mv JE.TR21201610011626514818.3578493139 JE.TR21201610011626514818
mv JE.TR21201610011627514819.1032212591 JE.TR21201610011627514819
mv JE.TR21201610011628514820.3663420052 JE.TR21201610011628514820
mv JE.TR21201610011629514821.3388683091 JE.TR21201610011629514821
(удалите echo
завершать действие).
Вот быстрый способ сделать это в Python:
$ tree
.
├── JE.TR21201610011612514806.47250728
├── JE.TR21201610011613514807.91514463
├── JE.TR21201610011614514808.4107721050
├── JE.TR21201610011626514818.3578493139
├── JE.TR21201610011627514819.1032212591
├── JE.TR21201610011628514820.3663420052
└── JE.TR21201610011629514821.3388683091
0 directories, 7 files
$ python -c 'import os,sys; map(lambda x: os.rename(x,x[0:x.rfind(".")]) , sys.argv[1:])' JE.*
$ tree
.
├── JE.TR21201610011612514806
├── JE.TR21201610011613514807
├── JE.TR21201610011614514808
├── JE.TR21201610011626514818
├── JE.TR21201610011627514819
├── JE.TR21201610011628514820
└── JE.TR21201610011629514821
Существуют ключевые пункты пары о том, как это работает:
JE.*
шарик, и затем относится к ним через sys.argv[1:]
. map()
позволяет нам выполнять lambda
функция на том, что находится в sys.argv[1:]
часть списка.lambda
функция, которую мы имеем здесь, использует os.rename(old,new)
функционируйте для фактического переименования каждого объекта в спискеx[0:x.rfind(".")]
на самом деле часть (или подстрока). Используя .rfind()
функционируйте мы находим индекс первого вхождения .
запуск с правой стороны строки (т.е. от конца). Таким образом часть списка может быть считана как x[0:<index of the last dot>]
Простой способ переименовать файлы и папки с mv
команда (сокращенный от "перемещения"). Его основная цель перемещает файлы и папки, но она может также переименовать их, так как действие переименования файла интерпретируется файловой системой как перемещение ее от одного имени до другого.
Синтаксис:
mv (option) file1.ext file2.ext
где file1.ext
"старое" название файла, и file2.ext
новое имя.
Одна команда, которую я использую довольно часто: vidir
. vi
или vim
для файлов и vidir
для каталогов.
Если Вы выполняете vidir и получаете команду, не найденную, необходимо установить пакет moreutils:
sudo apt-get install moreutils
Назад к Вашему случаю:
cd path-to-files
vidir
и нажмите ENTER:1,$ s/\.\d*$//g
(это ищет точку, сопровождаемую цифрами, и удаляет все в конец),:x
См. также http://vimregex.com/