정규식을 사용하여 파일 이름 바꾸기


0

rename 명령을 사용하여 여러 양의 파일 이름을 변경하는 데 약간의 문제가 있습니다 .

나는 1 개의 주요 directoy를 가지고 있으며, 그 후에는 많은 내용이 .wav 파일입니다.

/ rec / 101 / 101-27022018-01 : 00 : 09-M00.wav

파일의 '시간'을 변경하고 싶습니다.

101-27022018- 01 : 00 : 09-M00.wav

참조와 동일한 날짜 사용

101 27022018 -01 : 00 : 09 - M00.wav

나는 이와 같은 것을 시도했다 :

rename 's/27022018-01/27022018-08/' *.wav -v -n

문제는 모든 디렉토리 안에있는 모든 파일의 이름을 변경하려면 어떻게해야합니까? 어때요?


당신은 무엇을 변경 하시겠습니까 으로 ? 시간이 연도가되어야합니까? 다른 디렉토리는 어떻게 생겼습니까? 당신은 또한 같은 파일을 가질 수 있습니까 101-270265-02:00:09-M00.wav? 파일이 무엇 있다면 101-270218-15:00:09-M00.wav, 그것은이되어야 101-270209-09:00:08-M00.wav하거나 101-270209-18:00:09-M00.wav, 또는 뭔가 다른? 제발 편집 질문을하고 이름을 바꿀 수있는 파일이 필요로 정확히 얼마나 명확하게.
terdon

'모든 디렉토리 안에있는 모든 파일'이 있다고 말하면 '이름 바꾸기'명령이 적절하지 않은 것 같습니다. 디렉토리에 들어가는 파일을 기준으로 파일 이름을 여러 변수로 나누고 변경해야 할 변수를 변경 한 다음 다른 변수에 새 파일 이름을 만든 다음 'mv를 수행하는 스크립트 작성을 고려해야한다고 생각합니다. oldfile newfile '입니다.

모든 .wav 파일의 시간이 잘못되었지만 날짜가 맞으므로 날짜를이 특정 요일의 참조로 사용하여 해당 디렉토리에있는 모든 .wav 파일의 시간을 재귀 적으로 변경합니다.
Isaí Madueño

답변:


0

두 레벨의 디렉토리 구조가 있고 첫 번째 레벨 내에 파일이없는 경우 :

$ 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
...

참고 문헌 :


$ rename -n 's / 27022018-01 / 27022018-08 /'/tmp/rec/*/*.wav 한 시간 가까이 5 분을 늘리려면 어떻게해야합니까? 어떻게 이럴 수가있어? -> $ rename -n 's / 27022018-01 : {2} / 27022018-08 : {+ 5} /'/tmp/rec/*/*.wav이 Perl 정규식을 처음 사용합니다.
Isaí Madueño

안녕하세요, @ 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

rename -n -E 's/(27022018-01:)(\d+)/$1.($2+5)/e; s/27022018-01/27022018-08/' /tmp/rec/*/*.wav
pa4080
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.