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

У меня около 18k файлов с такими именами:

0001_6548
0002_7674
...
14767_4536

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

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

3 ответа

sudo apt-get install krename

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

, Как Обработать в пакетном режиме, Переименовывают Файлы в Ubuntu с KRename

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

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

Решение 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
ответ дан 2 December 2019 в 01:56

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

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

Отбрасывание -n для фактического действия.

  • ^\d{4}_\d{4}$ имена файлов соответствий с 4 цифрами, сопровождаемыми a _, с другой стороны 4 цифры

  • Те файлы переименованы с a 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
ответ дан 2 December 2019 в 01:56

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

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