Переименовать файлы в соответствии с родительской папкой [duplicate]

Если вы откроете диалог конфигурации клавиатуры, появится кнопка «Параметры ...» внизу справа. Один из этих параметров позволяет вам выбрать комбинацию клавиш для изменения раскладки клавиатуры; вы хотите отменить выбор всех (или выбрать тот, который вы никогда не активируете случайно).

0
задан 7 February 2018 в 11:03

3 ответа

Вы можете использовать rename для этого:

rename -n 's/(.*)\/.*\./$1\/$1./' */*

Эта команда должна быть запущена в каталоге непосредственно над каталогами, которые вы хотите обработать, точно так же, как в вашем примере. Сначала вы увидите список изменений, которые вы проверите, если вы довольны результатами, запустите его без -n для выполнения переименования.

Если в одном каталоге есть несколько файлов с одинаковым расширением , rename выведет предупреждение для каждого файла и просто опустит их. Вы можете принудительно перезаписать с помощью -f, но я очень сомневаюсь, что это то, что вы хотите сделать в этих случаях (редких?).

Пример run

$ tree
.
├── This.Is.A.Crazy.Name.S00E00.720p
│   ├── asdfasdfasdfasdfasdfasdfafs.mkv
│   ├── info.nfo
│   └── proof.jpg
└── You.See.Where.This.Is.Going.14x01.480p.crappo
    └── video.mp4
$ rename 's/(.*)\/.*\./$1\/$1./' */*
$ tree
.
├── This.Is.A.Crazy.Name.S00E00.720p
│   ├── This.Is.A.Crazy.Name.S00E00.720p.jpg
│   ├── This.Is.A.Crazy.Name.S00E00.720p.mkv
│   └── This.Is.A.Crazy.Name.S00E00.720p.nfo
└── You.See.Where.This.Is.Going.14x01.480p.crappo
    └── You.See.Where.This.Is.Going.14x01.480p.crappo.mp4

Пояснение 5]
rename 's/(.*)\/.*\./$1\/$1./' */*
s/a/b/ - s ubstitute a на b (.*)\/.*\. - взять все, пока (за исключением) не будет последней косой черты, сохраняя ее как группу 1, и возьмите косую черту и все до ( вкл.) последнюю точку и заменить ее на $1\/$1. - группу 1 (имя dir), косую черту, группу 1 снова (имя файла) и точку (точка перед расширением, которая сама по себе не коснулась) [!d6 ]

3
ответ дан 22 May 2018 в 13:15
  • 1
    & Quot; -n & Quot; Отличный ответ! & Quot; Вы уверены, что " ПРИХОДИЛА мне в голову. – stumblebee 7 February 2018 в 11:04
  • 2
    Большое спасибо! Это сделало именно то, что мне нужно. Наверное, я мог бы уточнить, что эти данные никоим образом не критичны, поэтому, если что-то в этом дереве папок, где можно каким-то образом перепутаться, это не было бы катастрофой. Я очень ценю вашу помощь! – DGC 7 February 2018 в 20:02

Вы можете использовать rename для этого:

rename -n 's/(.*)\/.*\./$1\/$1./' */*

Эта команда должна быть запущена в каталоге непосредственно над каталогами, которые вы хотите обработать, точно так же, как в вашем примере. Сначала вы увидите список изменений, которые вы проверите, если вы довольны результатами, запустите его без -n для выполнения переименования.

Если в одном каталоге есть несколько файлов с одинаковым расширением , rename выведет предупреждение для каждого файла и просто опустит их. Вы можете принудительно перезаписать с помощью -f, но я очень сомневаюсь, что это то, что вы хотите сделать в этих случаях (редких?).

Пример run

$ tree . ├── This.Is.A.Crazy.Name.S00E00.720p │   ├── asdfasdfasdfasdfasdfasdfafs.mkv │   ├── info.nfo │   └── proof.jpg └── You.See.Where.This.Is.Going.14x01.480p.crappo └── video.mp4 $ rename 's/(.*)\/.*\./$1\/$1./' */* $ tree . ├── This.Is.A.Crazy.Name.S00E00.720p │   ├── This.Is.A.Crazy.Name.S00E00.720p.jpg │   ├── This.Is.A.Crazy.Name.S00E00.720p.mkv │   └── This.Is.A.Crazy.Name.S00E00.720p.nfo └── You.See.Where.This.Is.Going.14x01.480p.crappo └── You.See.Where.This.Is.Going.14x01.480p.crappo.mp4

Пояснение

rename 's/(.*)\/.*\./$1\/$1./' */* s/a/b/ - s ubstitute a на b (.*)\/.*\. - взять все, пока (за исключением) не будет последней косой черты, сохраняя ее как группу 1, и возьмите косую черту и все до ( вкл.) последнюю точку и заменить ее на $1\/$1. - группу 1 (имя dir), косую черту, группу 1 снова (имя файла) и точку (точка перед расширением, которая сама по себе не коснулась)
3
ответ дан 17 July 2018 в 21:24

Вы можете использовать rename для этого:

rename -n 's/(.*)\/.*\./$1\/$1./' */*

Эта команда должна быть запущена в каталоге непосредственно над каталогами, которые вы хотите обработать, точно так же, как в вашем примере. Сначала вы увидите список изменений, которые вы проверите, если вы довольны результатами, запустите его без -n для выполнения переименования.

Если в одном каталоге есть несколько файлов с одинаковым расширением , rename выведет предупреждение для каждого файла и просто опустит их. Вы можете принудительно перезаписать с помощью -f, но я очень сомневаюсь, что это то, что вы хотите сделать в этих случаях (редких?).

Пример run

$ tree . ├── This.Is.A.Crazy.Name.S00E00.720p │   ├── asdfasdfasdfasdfasdfasdfafs.mkv │   ├── info.nfo │   └── proof.jpg └── You.See.Where.This.Is.Going.14x01.480p.crappo └── video.mp4 $ rename 's/(.*)\/.*\./$1\/$1./' */* $ tree . ├── This.Is.A.Crazy.Name.S00E00.720p │   ├── This.Is.A.Crazy.Name.S00E00.720p.jpg │   ├── This.Is.A.Crazy.Name.S00E00.720p.mkv │   └── This.Is.A.Crazy.Name.S00E00.720p.nfo └── You.See.Where.This.Is.Going.14x01.480p.crappo └── You.See.Where.This.Is.Going.14x01.480p.crappo.mp4

Пояснение

rename 's/(.*)\/.*\./$1\/$1./' */* s/a/b/ - s ubstitute a на b (.*)\/.*\. - взять все, пока (за исключением) не будет последней косой черты, сохраняя ее как группу 1, и возьмите косую черту и все до ( вкл.) последнюю точку и заменить ее на $1\/$1. - группу 1 (имя dir), косую черту, группу 1 снова (имя файла) и точку (точка перед расширением, которая сама по себе не коснулась)
3
ответ дан 23 July 2018 в 22:02

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

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