터미널이나 스크립트의 특정 위치에 공백 및/또는 구두점이 있는 여러 파일 이름에 문자를 삽입하는 방법

터미널이나 스크립트의 특정 위치에 공백 및/또는 구두점이 있는 여러 파일 이름에 문자를 삽입하는 방법

많은 파일이 포함된 디렉토리에서 특정 방식으로 이름을 바꾸기 위해 특정 문자를 음악 파일에 삽입하려고 합니다. 따라서 이 작업을 수동으로 수행하는 것은 시간이 많이 걸리며 터미널이나 프로그램을 사용하여 이 프로세스를 자동화하고 싶습니다. 배쉬 스크립트.

이것은 음악 컬렉션이기 때문에 많은 디렉토리에 분산된 많은 파일이 있습니다.

몇 가지 "awk", "rename" 및 "sed" 터미널 옵션을 시도했지만 터미널에서 정말 말도 안되는 출력을 얻는 것 같습니다(아마도 공백이나 구두점으로 인해). 작업을 중지하려면 Ctrl+z를 눌러야 합니다. 아니면 그냥 잘못되었습니다. "Krename"과 "Easytag"도 시도했지만 성공하지 못했습니다.

예를 들어 다음을 변경하고 싶습니다.

Chicane - Behind the Sun - 01 Overture.mp3

도착하다:

Chicane - Behind the Sun - 01 - Overture.mp3

그래서 31열이나 위치에 "-"를 추가해서 파일명을 바꾸고 싶은데 이 폴더에 파일이 10개가 더 있고 다른 폴더(앨범)도 더 많아서 바꾸고 싶어서 원하는 위치와 캐릭터 추가 달라질 것입니다.

내 bash/스크립팅 기술은 101입니다. 압축 및 기타 간단한 작업을 사용하여 몇 가지 백업 스크립트를 관리했지만 이는 현재 내 능력을 넘어서므로 도움을 주시면 대단히 감사하겠습니다.

나는 이것이 중복이라는 것을 알고 있지만 성공하지 못한 채 많은 옵션을 시도했지만 배우고 있으며 귀하의 도움으로 솔루션이 바로 코앞에 있으므로 미리 감사드립니다.

답변1

Perl 이름 바꾸기 도구를 사용하여,

처음 30자(또는 바이트, 로캘이 활성화되어 있는지는 모르겠습니다) 뒤에 삽입 -(대시 및 공백) :

rename 'substr($_, 30, 0) = "- "' *.mp3

-두 개의 숫자와 공백이 처음 나타나는 뒤에 추가합니다.

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

renamePerl에서 하나 util-linux, Perl에서 하나, 두 가지 다른 명령이 있습니다 . 그들은 다른 일을 합니다. 참조:

답변2

공백이 있는 파일 이름을 처리하려면 find및 가 필요합니다 xargs. 읽고man find xargs

find . -type f -print0 | xargs -0 --no-run-if-empty someprogram ...

ASCII NUL(0x00) 바이트로 구분된 파일 이름 목록을 생성하도록 지시합니다 -print0. findNUL(및 " /")은 파일 이름에 표시되지 않습니다.

xargs -0xargs이와 같이 0으로 구분된 목록을 사용하고 시스템이 허용하는 만큼 많은 파일 이름을 전달하도록 지시하십시오 someprogram. 그러면 someprogram더 이상 파일 이름이 없을 때까지 계속해서 호출됩니다.

xargs --show-limits </dev/null제한 사항이 표시됩니다.

관련 정보