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

Вы, вероятно, хотите прочитать perlipc документацию, в особенности раздел по Именованным каналам.

http://perldoc.perl.org/perlipc.html#Named-Pipes

perlipc - Межпроцессное взаимодействие Perl (сигналы, fifos, каналы, безопасные подпроцессы, сокеты и семафоры)

Если Вам нужно двухсторонний (чтение и запись) связь с внешней программой, то IPC:: Open2 или IPC:: модули Open3 (стандартный lib жемчуга, также зарегистрированный в URL выше), будут полезны.

3
28.09.2013, 07:39
3 ответа

Используя rename (тот от perl иногда называемый prename, не от util-linux):

rename 's/(\d{2})(\d{2})(\d{2})(\d{2})/$1:$2:$3:$4/'  *.avi

Это переименовало бы имя файла как custom text 00030402.avi кому: custom text 00:03:04:02.avi.

Если Вы обратные косые черты в имени файла (прежде чем :), скажите:

rename 's/(\d{2})(\d{2})(\d{2})(\d{2})/$1\\:$2\\:$3\\:$4/' *.avi

Для удаления пользовательского текста из имен файлов скажите:

rename 's/.* (\d{2})(\d{2})(\d{2})(\d{2})(.*)/$1\\:$2\\:$3\\:$4$5/' *.avi
4
27.01.2020, 21:13
  • 1
    Возможно, что-то неправильно, потому что я получаю следующую ошибку в терминале: не Может переименовать zlatin 00364220.avi zlatin 00:36:42:20.avi: недействительный аргумент –  ispasov 28.09.2013, 08:49
  • 2
    @ispasov, Что делает rename -n 's/(\d{2})(\d{2})(\d{2})(\d{2})/$1:$2:$3:$4/' *.avi сказать? –  devnull 28.09.2013, 08:52
  • 3
    @ispasov И Вы хотите обратные косые черты ('') в получающемся имени файла? –  devnull 28.09.2013, 08:53
  • 4
    zlatin 00364220.avi renamed as zlatin 00:36:42:20.avi –  ispasov 28.09.2013, 08:56
  • 5
    @ispasov можно сказать * также. –  devnull 28.09.2013, 16:14

С zsh:

$ autoload zmv
$ zmv -v '(*)(??)(??)(??).avi' '$1\:$2\:$3\:$4.avi'
mv -- custom\ text\ 00030402.avi custom\ text\ 00\\:03\\:04\\:02.avi

(-v для подробного). Удалить пользовательский текст:

$ zmv -v '*(??)(??)(??)(??).avi' '$1\:$2\:$3\:$4.avi'
mv -- custom\ text\ 00030402.avi 00\\:03\\:04\\:02.avi
2
27.01.2020, 21:13

Вот способ сделать это с Perl regex предвидение:

perl -e '
    while($name=shift){
        @components = split /(?=(?:[0-9]{2})+[^0-9]+$)/,$name;
        shift @components;
        $new_name = join '\:',@components;
        rename $name => $new_name;
    }
' list_of_avi_files

Это будет работать на любое количество пар цифры, не всего 4. Можно также измениться {2} кому: {3}, например, и имейте его, разделение на цифре утраивается.

1
27.01.2020, 21:13

Теги

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