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

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

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

8 ответов

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

Если вы выполняете vidir и команда get не найдена, вам нужно установить пакет moreutils:

sudo apt-get install moreutils

Вернуться к вашему делу:

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

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

0
ответ дан 18 July 2018 в 10:26

Вот быстрый способ сделать это в 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.* glob и затем обратитесь к ним через 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
ответ дан 18 July 2018 в 10:26

Любое из

$ 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
ответ дан 18 July 2018 в 10:26

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

Синтаксис:

mv (option) file1.ext file2.ext

где file1.ext - это «старое» имя файла, а file2.ext - новое имя.

0
ответ дан 18 July 2018 в 10:26

Вот быстрый способ сделать это в 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.* glob и затем обратитесь к ним через 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
ответ дан 24 July 2018 в 19:34

Любое из

$ 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
ответ дан 24 July 2018 в 19:34

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

Синтаксис:

mv (option) file1.ext file2.ext

где file1.ext - это «старое» имя файла, а file2.ext - новое имя.

0
ответ дан 24 July 2018 в 19:34

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

Если вы выполняете vidir и команда get не найдена, вам нужно установить пакет moreutils:

sudo apt-get install moreutils

Вернуться к вашему делу:

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

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

0
ответ дан 24 July 2018 в 19:34

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

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