Переименуйте файлы для удаления текста после точки

У меня есть эти файлы:

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
2
задан 11 July 2017 в 21:34

4 ответа

Любой из

$ 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 завершать действие).

8
ответ дан 2 December 2019 в 01:29

Вот быстрый способ сделать это в 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>]
1
ответ дан 2 December 2019 в 01:29

Простой способ переименовать файлы и папки с mv команда (сокращенный от "перемещения"). Его основная цель перемещает файлы и папки, но она может также переименовать их, так как действие переименования файла интерпретируется файловой системой как перемещение ее от одного имени до другого.

Синтаксис:

mv (option) file1.ext file2.ext

где file1.ext "старое" название файла, и file2.ext новое имя.

0
ответ дан 2 December 2019 в 01:29

Одна команда, которую я использую довольно часто: vidir. vi или vim для файлов и vidir для каталогов.

Если Вы выполняете vidir и получаете команду, не найденную, необходимо установить пакет moreutils:

sudo apt-get install moreutils

Назад к Вашему случаю:

  1. Перейдите к каталогу, были файлы: cd path-to-files
  2. Команда Type: vidir и нажмите ENTER
  3. Теперь Вы будете видеть весь список со всеми файлами, ввести эту команду: :1,$ s/\.\d*$//g (это ищет точку, сопровождаемую цифрами, и удаляет все в конец),
  4. Выйти и сохранить тип: :x

См. также http://vimregex.com/

0
ответ дан 2 December 2019 в 01:29

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

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