Вставьте символ в имя файла, в зависимости от длины файла [закрыто]

У меня около 18 тыс. файлов, которые названы так:

0001_6548 0002_7674 ... 14767_4536

Мне нужно добавить начальный ноль к именам файлов, которые содержат только 4 цифры в первой части, поэтому они, естественно, сортируют правильный путь.

2
задан 2 April 2017 в 12:09

11 ответов

Легкое задание для rename (prename) из этого каталога:

rename -n 's/^\d{4}_\d{4}$/0$&/' [[:digit:]]*

Drop -n для действительного действия.

^\d{4}_\d{4}$ соответствует именам файлов с 4 цифры, за которыми следует _, затем снова 4 цифры. Эти файлы переименовываются с префиксом 0 с префиксом, 0$&

Пример:

% ls [[:digit:]]* 0001_6548 0002_7674 14767_4536 % rename -n 's/^\d{4}_\d{4}$/0$&/' [[:digit:]]* 0001_6548 renamed as 00001_6548 0002_7674 renamed as 00002_7674 % rename 's/^\d{4}_\d{4}$/0$&/' [[:digit:]]* % ls [[:digit:]]* 00001_6548 00002_7674 14767_4536
3
ответ дан 18 July 2018 в 15:40

Решение Python:

#!/usr/bin/env python from os import listdir,path,rename from sys import argv import re for i in listdir("."): if i == argv[0] or not path.isfile(i): continue if re.match('\d{4}_\d{4}',i): rename(i,'0'+i)

Тест:

$ ls 0001_6548 0002_7674 14767_4536 append_zero.py* $ ./append_zero.py $ ls 00001_6548 00002_7674 14767_4536 append_zero.py*
0
ответ дан 18 July 2018 в 15:40
sudo apt-get install krename

Это хорошее приложение на основе gui для переименования пакетных файлов. Попробуйте

Как переименовать файлы в Ubuntu с помощью KRename

В этой статье объясняется, как использовать krename (я не автор)

2
ответ дан 18 July 2018 в 15:40

Легкое задание для rename (prename) из этого каталога:

rename -n 's/^\d{4}_\d{4}$/0$&/' [[:digit:]]*

Drop -n для действительного действия.

^\d{4}_\d{4}$ соответствует именам файлов с 4 цифры, за которыми следует _, затем снова 4 цифры. Эти файлы переименовываются с префиксом 0 с префиксом, 0$&

Пример:

% ls [[:digit:]]* 0001_6548 0002_7674 14767_4536 % rename -n 's/^\d{4}_\d{4}$/0$&/' [[:digit:]]* 0001_6548 renamed as 00001_6548 0002_7674 renamed as 00002_7674 % rename 's/^\d{4}_\d{4}$/0$&/' [[:digit:]]* % ls [[:digit:]]* 00001_6548 00002_7674 14767_4536
3
ответ дан 24 July 2018 в 20:41
  • 1
    Это Centos я получил здесь на рабочей станции, и он не поддерживает Perl. Любые идеи о том, как сделать это с помощью rename.ul (я считаю, что это то же самое, что и переименовать centos) – AlexReva 2 April 2017 в 10:32
  • 2
    Вы имеете в виду, что вы задаете вопрос, связанный с CentOS, на сайте AskUbuntu? Тогда это OFF-ТЕМА – Mostafa Ahangarha 2 April 2017 в 11:06
  • 3
    Обратитесь к этому: reddit.com/r/linuxadmin/comments/5lim1i/… Вам нужно будет установить cpan, а затем получить служебную программу переименования perl. На Ubuntu prename устанавливается по умолчанию, а heemayl - абсолютно правильный ответ. Но опять же - пожалуйста, не предполагайте, что «просто потому, что это Linux». вы можете задавать вопросы где угодно. Ubuntu имеет определенный набор инструментов, отличных от CentOS – Sergiy Kolodyazhnyy 2 April 2017 в 11:58
  • 4
    Я понял. Отбросит мой вопрос. Я сомневаюсь, что мой root использует python, но если это так, я попробую ваш скрипт завтра. Благодаря! – AlexReva 2 April 2017 в 15:02

Решение Python:

#!/usr/bin/env python from os import listdir,path,rename from sys import argv import re for i in listdir("."): if i == argv[0] or not path.isfile(i): continue if re.match('\d{4}_\d{4}',i): rename(i,'0'+i)

Тест:

$ ls 0001_6548 0002_7674 14767_4536 append_zero.py* $ ./append_zero.py $ ls 00001_6548 00002_7674 14767_4536 append_zero.py*
0
ответ дан 24 July 2018 в 20:41
sudo apt-get install krename

Это хорошее приложение на основе gui для переименования пакетных файлов. Попробуйте

Как переименовать файлы в Ubuntu с помощью KRename

В этой статье объясняется, как использовать krename (я не автор)

2
ответ дан 24 July 2018 в 20:41

Легкое задание для rename (prename) из этого каталога:

rename -n 's/^\d{4}_\d{4}$/0$&/' [[:digit:]]*

Drop -n для действительного действия.

^\d{4}_\d{4}$ соответствует именам файлов с 4 цифры, за которыми следует _, затем снова 4 цифры. Эти файлы переименовываются с префиксом 0 с префиксом, 0$&

Пример:

% ls [[:digit:]]* 0001_6548 0002_7674 14767_4536 % rename -n 's/^\d{4}_\d{4}$/0$&/' [[:digit:]]* 0001_6548 renamed as 00001_6548 0002_7674 renamed as 00002_7674 % rename 's/^\d{4}_\d{4}$/0$&/' [[:digit:]]* % ls [[:digit:]]* 00001_6548 00002_7674 14767_4536
3
ответ дан 31 July 2018 в 23:43
  • 1
    Это Centos я получил здесь на рабочей станции, и он не поддерживает Perl. Любые идеи о том, как сделать это с помощью rename.ul (я считаю, что это то же самое, что и переименовать centos) – AlexReva 2 April 2017 в 10:32
  • 2
    Вы имеете в виду, что вы задаете вопрос, связанный с CentOS, на сайте AskUbuntu? Тогда это OFF-ТЕМА – Mostafa Ahangarha 2 April 2017 в 11:06
  • 3
    Обратитесь к этому: reddit.com/r/linuxadmin/comments/5lim1i/… Вам нужно будет установить cpan, а затем получить служебную программу переименования perl. На Ubuntu prename устанавливается по умолчанию, а heemayl - абсолютно правильный ответ. Но опять же - пожалуйста, не предполагайте, что «просто потому, что это Linux». вы можете задавать вопросы где угодно. Ubuntu имеет определенный набор инструментов, отличных от CentOS – Sergiy Kolodyazhnyy 2 April 2017 в 11:58
  • 4
    Я понял. Отбросит мой вопрос. Я сомневаюсь, что мой root использует python, но если это так, я попробую ваш скрипт завтра. Благодаря! – AlexReva 2 April 2017 в 15:02

Решение Python:

#!/usr/bin/env python from os import listdir,path,rename from sys import argv import re for i in listdir("."): if i == argv[0] or not path.isfile(i): continue if re.match('\d{4}_\d{4}',i): rename(i,'0'+i)

Тест:

$ ls 0001_6548 0002_7674 14767_4536 append_zero.py* $ ./append_zero.py $ ls 00001_6548 00002_7674 14767_4536 append_zero.py*
0
ответ дан 31 July 2018 в 23:43
sudo apt-get install krename

Это хорошее приложение на основе gui для переименования пакетных файлов. Попробуйте

Как переименовать файлы в Ubuntu с помощью KRename

В этой статье объясняется, как использовать krename (я не автор)

2
ответ дан 31 July 2018 в 23:43

Решение Python:

#!/usr/bin/env python
from os import listdir,path,rename
from sys import argv
import re
for i in listdir("."):
    if i == argv[0] or not path.isfile(i):
        continue
    if re.match('\d{4}_\d{4}',i):
        rename(i,'0'+i)

Тест:

$ ls
0001_6548  0002_7674  14767_4536  append_zero.py*
$ ./append_zero.py                                    
$ ls
00001_6548  00002_7674  14767_4536  append_zero.py*
0
ответ дан 3 August 2018 в 20:58

Решение Python:

#!/usr/bin/env python
from os import listdir,path,rename
from sys import argv
import re
for i in listdir("."):
    if i == argv[0] or not path.isfile(i):
        continue
    if re.match('\d{4}_\d{4}',i):
        rename(i,'0'+i)

Тест:

$ ls
0001_6548  0002_7674  14767_4536  append_zero.py*
$ ./append_zero.py                                    
$ ls
00001_6548  00002_7674  14767_4536  append_zero.py*
0
ответ дан 6 August 2018 в 22:44

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

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