오디오 파일에서 원하지 않는 문자를 제거하기 위해 특정 확장자를 가진 파일 이름을 반복적으로 바꾸는 방법

오디오 파일에서 원하지 않는 문자를 제거하기 위해 특정 확장자를 가진 파일 이름을 반복적으로 바꾸는 방법

.m4a오디오 파일에서 원하지 않는 문자를 제거하기 위해 하위 디렉터리의 확장자를 사용하여 파일 이름을 반복적으로 바꾸고 싶습니다 .'].

04 Tears Don't Fall.m4a이는 다른 파일이 없으면 파일에 다음과 같은 일이 발생하기 때문입니다.

2005-09-30 - Poison(Deluxe Edition) [US - 88697-09021-2 - 2007]/04 Tears Don't Fall.m4a 파일을 로드할 수 없습니다. 지원되는 파일 형식이 아닐 수도 있나요? ffmpeg를 사용하여 로드하려고 하면 다음 오류가 발생합니다: FFmpeg가 파일을 읽을 수 없습니다.

답변1

ffmpeg작은 따옴표가 포함된 파일 이름을 읽는 것이 완벽하게 가능하기 때문에 작업에 뭔가 문제가 있는 것 같습니다 .

mkdir '2005-09-30 - The Poison (Deluxe Edition) [US - 88697-09021-2 - 2007]'
cp -p {another.m4a} "2005-09-30 - The Poison (Deluxe Edition) [US - 88697-09021-2 - 2007]/04 Tears Don't Fall.m4a"

ffmpeg -i "2005-09-30 - The Poison (Deluxe Edition) [US - 88697-09021-2 - 2007]/04 Tears Don't Fall.m4a"

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '2005-09-30 - The Poison (Deluxe Edition) [US - 88697-09021-2 - 2007]/04 Tears Don't Fall.m4a':
  Metadata:
    major_brand     : M4A
    minor_version   : 0
    compatible_brands: M4A mp42isom
...

어쩌면 당신이 올바르게 인용하지 않았을 수도 있습니다. 불행하게도 코드를 보지 않고는 이를 확인할 수 있는 방법이 없으며 가능한 문제로 표시할 뿐입니다.

그러나 문자 집합을 제거하기 위해 파일 이름을 바꾸려면 다음과 같은 코드를 사용할 수 있습니다.

find . -type f -name '*.m4a' -exec \
    sh -c 'for f in "$@"; do echo mv "$f" "${f'"//[\']/"'}"; done' _ {} +

echo실행할 준비가 되면 삭제하세요 mv.

[\']제거할 추가 문자를 포함하도록 범위를 확장할 수 있습니다 . 예를 들어 [\'\\\"\\\`:]작은따옴표, 큰따옴표, 역따옴표 및 콜론을 제거 하도록 선택할 수 있습니다 . (작은따옴표는 접두사로 시작해야 하며 \, 큰따옴표, 백틱 및 달러 기호는 앞에 와야 합니다 \\\.)

답변2

#!/bin/bash

shopt -s globstar
for fn in **/*\'*.m4a; do echo mv "$fn" "${fn/\'/}"; done

echo실제로 이름을 바꾸기 전에 결과를 확인해야 합니다.

답변3

먼저 $1을 $1((') 제외)로 이동하는 쉘 스크립트를 작성하고 이를 Special_move.sh라고 부르겠습니다. 파일에 실행 권한을 부여하는 것을 잊지 마십시오.

#!/bin/bash

orgFile=$1
destFile=${orgFile//\'/}

echo "mv $orgFile $destFile"
#mv $orgFile $destFile

그런 다음 파일이 저장된 루트 디렉터리로 이동하고 cmd를 입력합니다.

find . -name "*'*.m4a" -exec /absolute/path/special_move.sh {} \;

만족스럽게 테스트하고 스크립트 파일의 마지막 줄의 주석 처리를 제거합니다.

관련 정보