오늘 저는 쉘 명령이 제가 전혀 이해하지 못하는 일부 오디오 파일에서 예상치 못한 결과를 생성하는 사례를 제출했습니다.
사실은 다음과 같습니다.
내 운영 체제는 ArchLinux이고 Windows 관리자는 Awesome이며 내가 사용하는 터미널은 Konsole입니다.
',{,[,?,!
공백 및/ 또는 특정 문자를 제거하여 이름을 바꾸고 싶기 때문에 공백 및/또는 특정 문자가 포함된 디렉터리와 파일이 많이 있습니다 .쉘 명령을 찾는 동안 문자를 다음으로 바꾸는 명령을 발견
_
했습니다.
.
$ find ./ -type f -exec sed -i -e 's/_/./g' {} \;
- 모든 파일의 이름이 예상대로 변경된 여러 디렉토리에서 이 명령을 사용했으며 이에 만족합니다.
하지만
- 이름을 바꾸고 싶은 일부 오디오 파일이 포함된 디렉터리가 있었고 이 디렉터리에 이 bash 명령을 적용했습니다. 이전 사용과 달리 프로세스가 훨씬 오래 걸리고 최종 결과가 기대했던 것과 다릅니다. 첫째, 대부분의 파일 이름이 아직 변경되지 않았습니다. 둘째, 모든 오디오 파일(mp3, flac...)이 변경/손상되어 더 이상 오디오 파일 리더에서 인식되지 않습니다. 대조적으로, bash 명령을 사용하지 않은 오디오 파일은 항상 정확하고 읽기 쉽습니다.
예를 들어 smplayer를 사용하여 변경된 파일 중 하나를 읽으려고 하면 다음과 같은 오류 메시지가 나타납니다. MPlayer/mpv가 예기치 않게 완료되었습니다. 종료 코드: 2. 로그 파일에 "파일 형식이 인식되지 않습니다."라고 추가됩니다.
첫 번째 답변을 참조하여 변경의 영향에 대한 추가 정보를 아래에 제공합니다.
내가 원하는 것을 얻기 위해 3가지 명령을 사용했습니다.
./ -type f -exec sed -i -e 's/_/./g' {} \;
./ -type f -exec sed -i -e 's/ /./g' {} \;
./ -type f -exec sed -i -e 's/.././g' {} \;
다음은 손상 전 > 손상 후 파일 이름의 몇 가지 예입니다.
1_-_Bob_The_Sponge_-_Living under the Sea.flac > 1.-.Bob.The.Sponge.-. Living.under the Sea.flac (일부 공백이 아직 남아 있음을 참고하세요)
2_-_Bob_The_Sponge_-_Nemo_my_friend.mp3 > 2.-.Bob_The.Sponge.-.Nemo my.friend.mp3 ("_" 1개는 제거되지 않았으며 이름에 공백 1개가 추가되었습니다.)
여기서 모든 상황을 재현할 수는 없고, 파일명이 변경된 것도 있고, 부분적인 것도 있고, 여전히 이전과 같은 것도 있습니다.
변경된 파일의 가중치는 변경되지 않았으며 해당 파일의 권한도 변경되지 않았습니다. 마지막 수정 날짜만 변경되었습니다.
물론, 무슨 일이 일어나고 있는지 알고 싶습니다. 다른 브라우저를 사용하여 설명을 찾아보았지만 유사하거나 비슷한 내용을 찾지 못했습니다.
그래서 내 질문은 다음과 같습니다.
- 이 bash 명령이 이러한 오디오 파일을 변경하는 것처럼 보이는 이유는 무엇입니까?
- 이 명령이 이 유형의 파일에서는 작동하지만 다른 파일에서는 작동하지 않는 이유는 무엇입니까?
- 이 명령으로 인해 이러한 파일에 가해진 손상을 되돌릴 수 있는 솔루션이 있습니까?
답변1
다음 명령을 사용했습니다.
find ./ -type f -exec sed -i -e 's/_/./g' {} \;
이것은 기본적으로 무엇을 하는가
sed -i -e 's/_/./g' filename
find
명령으로 찾은 각 파일 에 대해 . sed
파일을 한 줄씩 살펴보고 s
(replace) 명령을 사용하여 각 _
파일 을 .
. -i
파일이 손상된 것도 당연합니다!
오래된 파일은 복사할 수 없습니다. 당신은 변했고 _
, 도착
..
했습니다 .
. 여러분이 아는 것은 .
파일의 모든 문자가 아마도 .
이러한 문자 중 하나(또는 )일 것이라는 것입니다.