Переименовать файл с помощью регулярного выражения

Кажется, последние исправления от AMD наконец решили все мои проблемы. См. Https://cgit.freedesktop.org/~agd5f/linux/log/?h=amd-staging-drm-next. Теперь вам нужно скомпилировать ваше собственное ядро ​​или подождать, пока эти исправления не попадут в ваш дистрибутив. [!d0 ]

0
задан 28 February 2018 в 01:08

3 ответа

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

$ tree /tmp/rec
/tmp/rec
├── 101
│   ├── 101-27022018-01:00:09-M00.wav
│   └── 101-27022018-01:00:09-M01.wav
├── 102
│   ├── 101-27022018-01:00:09-M00.wav
│   └── 101-27022018-01:00:09-M01.wav
└── 103
    ├── 101-27022018-01:00:09-M00.wav
    └── 101-27022018-01:00:09-M01.wav

$ rename -n 's/27022018-01/27022018-08/' /tmp/rec/*/*.wav

rename(/tmp/rec/101/101-27022018-01:00:09-M00.wav, /tmp/rec/101/101-27022018-08:00:09-M00.wav)
rename(/tmp/rec/101/101-27022018-01:00:09-M01.wav, /tmp/rec/101/101-27022018-08:00:09-M01.wav)
rename(/tmp/rec/102/101-27022018-01:00:09-M00.wav, /tmp/rec/102/101-27022018-08:00:09-M00.wav)
rename(/tmp/rec/102/101-27022018-01:00:09-M01.wav, /tmp/rec/102/101-27022018-08:00:09-M01.wav)
rename(/tmp/rec/103/101-27022018-01:00:09-M00.wav, /tmp/rec/103/101-27022018-08:00:09-M00.wav)
rename(/tmp/rec/103/101-27022018-01:00:09-M01.wav, /tmp/rec/103/101-27022018-08:00:09-M01.wav)

Когда структура каталогов более сложна, мы можем использовать опцию bash globstar:

$ tree /tmp/rec
/tmp/rec
├── 101
│   ├── 00
│   │   └── 101-27022018-01:00:09-M00.wav
│   ├── 01
│   │   └── 101-27022018-01:00:09-M00.wav
│   ├── 101-27022018-01:00:09-M00.wav
│   └── 101-27022018-01:00:09-M01.wav
├── 102
│   ├── 00
│   │   └── 101-27022018-01:00:09-M00.wav
│   ├── 01
│   │   └── 101-27022018-01:00:09-M00.wav
│   ├── 101-27022018-01:00:09-M00.wav
│   └── 101-27022018-01:00:09-M01.wav
└── 103
    ├── 00
    │   └── 101-27022018-01:00:09-M00.wav
    ├── 01
    │   └── 101-27022018-01:00:09-M00.wav
    ├── 101-27022018-01:00:09-M00.wav
    └── 101-27022018-01:00:09-M01.wav

9 directories, 12 files

$ shopt -s globstar
$ rename -v 's/27022018-01/27022018-08/' /tmp/rec/**/*.wav

/tmp/rec/101/00/101-27022018-01:00:09-M00.wav renamed as /tmp/rec/101/00/101-27022018-08:00:09-M00.wav
/tmp/rec/101/01/101-27022018-01:00:09-M00.wav renamed as /tmp/rec/101/01/101-27022018-08:00:09-M00.wav
/tmp/rec/101/101-27022018-01:00:09-M00.wav renamed as /tmp/rec/101/101-27022018-08:00:09-M00.wav
/tmp/rec/101/101-27022018-01:00:09-M01.wav renamed as /tmp/rec/101/101-27022018-08:00:09-M01.wav
...

Ссылки:

Рекурсивный скрипт bash для сбора информации о каждом файле в структуре каталогов
0
ответ дан 22 May 2018 в 12:51
  • 1
    $ rename -n 's / 27022018-01 / 27022018-08 /' /tmp/rec/*/*.wav Что делать, если я хочу увеличить 5 минут около часа? Как это могло произойти? - & GT; $ rename -n 's / 27022018-01: {2} / 27022018-08: {+ 5} /' /tmp/rec/*/*.wav Я новичок в этом регулярном выражении Perl. – Isaí Madueño 28 February 2018 в 19:53
  • 2
    Привет, @ IsaíMadueño, это должно быть что-то вроде этого rename -n 's/(27022018-01:)(\d+)/$1.(${2}+5)/e' /tmp/rec/*/*.wav, но я не знаю полного ответа. Это добавит +5 ко второй переменной, но первая часть $1=27022018-01: не будет изменена. Следующий ближе, возможно: rename -n 's/(27022018-)(01)(:)(\d+)/$1.($2+7).$3.($4+5)/e' /tmp/rec/*/*.wav – pa4080 1 March 2018 в 01:37
  • 3
    Или: rename -n -E 's/(27022018-01:)(\d+)/$1.($2+5)/e; s/27022018-01/27022018-08/' /tmp/rec/*/*.wav – pa4080 1 March 2018 в 01:45

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

$ tree /tmp/rec /tmp/rec ├── 101 │   ├── 101-27022018-01:00:09-M00.wav │   └── 101-27022018-01:00:09-M01.wav ├── 102 │   ├── 101-27022018-01:00:09-M00.wav │   └── 101-27022018-01:00:09-M01.wav └── 103 ├── 101-27022018-01:00:09-M00.wav └── 101-27022018-01:00:09-M01.wav $ rename -n 's/27022018-01/27022018-08/' /tmp/rec/*/*.wav rename(/tmp/rec/101/101-27022018-01:00:09-M00.wav, /tmp/rec/101/101-27022018-08:00:09-M00.wav) rename(/tmp/rec/101/101-27022018-01:00:09-M01.wav, /tmp/rec/101/101-27022018-08:00:09-M01.wav) rename(/tmp/rec/102/101-27022018-01:00:09-M00.wav, /tmp/rec/102/101-27022018-08:00:09-M00.wav) rename(/tmp/rec/102/101-27022018-01:00:09-M01.wav, /tmp/rec/102/101-27022018-08:00:09-M01.wav) rename(/tmp/rec/103/101-27022018-01:00:09-M00.wav, /tmp/rec/103/101-27022018-08:00:09-M00.wav) rename(/tmp/rec/103/101-27022018-01:00:09-M01.wav, /tmp/rec/103/101-27022018-08:00:09-M01.wav)

Когда структура каталогов более сложна, мы можем использовать опцию bash globstar:

$ tree /tmp/rec /tmp/rec ├── 101 │   ├── 00 │   │   └── 101-27022018-01:00:09-M00.wav │   ├── 01 │   │   └── 101-27022018-01:00:09-M00.wav │   ├── 101-27022018-01:00:09-M00.wav │   └── 101-27022018-01:00:09-M01.wav ├── 102 │   ├── 00 │   │   └── 101-27022018-01:00:09-M00.wav │   ├── 01 │   │   └── 101-27022018-01:00:09-M00.wav │   ├── 101-27022018-01:00:09-M00.wav │   └── 101-27022018-01:00:09-M01.wav └── 103 ├── 00 │   └── 101-27022018-01:00:09-M00.wav ├── 01 │   └── 101-27022018-01:00:09-M00.wav ├── 101-27022018-01:00:09-M00.wav └── 101-27022018-01:00:09-M01.wav 9 directories, 12 files $ shopt -s globstar $ rename -v 's/27022018-01/27022018-08/' /tmp/rec/**/*.wav /tmp/rec/101/00/101-27022018-01:00:09-M00.wav renamed as /tmp/rec/101/00/101-27022018-08:00:09-M00.wav /tmp/rec/101/01/101-27022018-01:00:09-M00.wav renamed as /tmp/rec/101/01/101-27022018-08:00:09-M00.wav /tmp/rec/101/101-27022018-01:00:09-M00.wav renamed as /tmp/rec/101/101-27022018-08:00:09-M00.wav /tmp/rec/101/101-27022018-01:00:09-M01.wav renamed as /tmp/rec/101/101-27022018-08:00:09-M01.wav ...

Ссылки:

Рекурсивный скрипт bash для сбора информации о каждом файле в структуре каталогов
0
ответ дан 17 July 2018 в 19:51

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

$ tree /tmp/rec /tmp/rec ├── 101 │   ├── 101-27022018-01:00:09-M00.wav │   └── 101-27022018-01:00:09-M01.wav ├── 102 │   ├── 101-27022018-01:00:09-M00.wav │   └── 101-27022018-01:00:09-M01.wav └── 103 ├── 101-27022018-01:00:09-M00.wav └── 101-27022018-01:00:09-M01.wav $ rename -n 's/27022018-01/27022018-08/' /tmp/rec/*/*.wav rename(/tmp/rec/101/101-27022018-01:00:09-M00.wav, /tmp/rec/101/101-27022018-08:00:09-M00.wav) rename(/tmp/rec/101/101-27022018-01:00:09-M01.wav, /tmp/rec/101/101-27022018-08:00:09-M01.wav) rename(/tmp/rec/102/101-27022018-01:00:09-M00.wav, /tmp/rec/102/101-27022018-08:00:09-M00.wav) rename(/tmp/rec/102/101-27022018-01:00:09-M01.wav, /tmp/rec/102/101-27022018-08:00:09-M01.wav) rename(/tmp/rec/103/101-27022018-01:00:09-M00.wav, /tmp/rec/103/101-27022018-08:00:09-M00.wav) rename(/tmp/rec/103/101-27022018-01:00:09-M01.wav, /tmp/rec/103/101-27022018-08:00:09-M01.wav)

Когда структура каталогов более сложна, мы можем использовать опцию bash globstar:

$ tree /tmp/rec /tmp/rec ├── 101 │   ├── 00 │   │   └── 101-27022018-01:00:09-M00.wav │   ├── 01 │   │   └── 101-27022018-01:00:09-M00.wav │   ├── 101-27022018-01:00:09-M00.wav │   └── 101-27022018-01:00:09-M01.wav ├── 102 │   ├── 00 │   │   └── 101-27022018-01:00:09-M00.wav │   ├── 01 │   │   └── 101-27022018-01:00:09-M00.wav │   ├── 101-27022018-01:00:09-M00.wav │   └── 101-27022018-01:00:09-M01.wav └── 103 ├── 00 │   └── 101-27022018-01:00:09-M00.wav ├── 01 │   └── 101-27022018-01:00:09-M00.wav ├── 101-27022018-01:00:09-M00.wav └── 101-27022018-01:00:09-M01.wav 9 directories, 12 files $ shopt -s globstar $ rename -v 's/27022018-01/27022018-08/' /tmp/rec/**/*.wav /tmp/rec/101/00/101-27022018-01:00:09-M00.wav renamed as /tmp/rec/101/00/101-27022018-08:00:09-M00.wav /tmp/rec/101/01/101-27022018-01:00:09-M00.wav renamed as /tmp/rec/101/01/101-27022018-08:00:09-M00.wav /tmp/rec/101/101-27022018-01:00:09-M00.wav renamed as /tmp/rec/101/101-27022018-08:00:09-M00.wav /tmp/rec/101/101-27022018-01:00:09-M01.wav renamed as /tmp/rec/101/101-27022018-08:00:09-M01.wav ...

Ссылки:

Рекурсивный скрипт bash для сбора информации о каждом файле в структуре каталогов
0
ответ дан 23 July 2018 в 20:36

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

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