>

오늘 나는 전혀 이해하지 못하는 일부 오디오 파일에서 쉘 명령으로 예기치 않은 결과가 발생하는 경우를 제출한다.

사실은 다음과 같습니다.

<올>
  • 내 OS는 ArchLinux이고, Windows 관리자는 최고이며 사용 된 터미널은 Konsole입니다.

  • ',{,[,?,! 와 같이 공백 및/또는 특정 문자를 포함하는 많은 디렉토리 및 파일이 있습니다.  공백이나 특정 문자를 제거하여 이름을 바꾸고 싶었습니다.

  • 쉘 명령을 찾고 있는데,이 명령이 _ 를 대체하는 것을 발견했습니다.   . 의 성격 :

  • $찾기 ./ -type f -exec sed -i -e 's /_/./ g'{} \;

    1. 모든 파일이 예상대로 이름이 바뀐 많은 디렉토리에서이 명령을 사용했는데 기뻤습니다.

    그러나

    1. 이름을 바꾸려는 일부 오디오 파일이 포함 된 디렉토리가 있으므로이 디렉토리에이 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 _-_ 바다 밑에서의 생활>1 .-. Bob.The. 스폰지 .-. Sea.flac 아래 Living. (일부 공간은 여전히 ​​존재 함)

    2 _-_ Bob_The_Sponge _-_ Nemo_my_friend.mp3>2 .-. Bob_The.Sponge .-. Nemo my.friend.mp3 (하나의 '_'는 제거되지 않았고 이름에 하나의 공백이 추가되었습니다.) p>

    여기서는 모든 경우를 재현 할 수 없으며 일부 파일 이름은 일부 변경되었거나 일부는 이전과 동일합니다.

    변경된 파일의 무게는 변경되지 않았으며 이러한 파일의 권한도 변경되지 않았습니다. 마지막 수정 날짜 만 변경되었습니다.

    당연히, 나는 무슨 일이 있었는지 이해하고 싶습니다. 다른 브라우저에서 설명을 찾으려고했지만 유사하거나 가까운 문제를 찾지 못했습니다.

    내 질문은 :

    <올>
  • 이 bash 명령이 이러한 오디오 파일을 변경 한 이유는 무엇입니까?
  • 이 명령이 다른 파일이 아닌이 파일 형식에 영향을 미치는 이유는 무엇입니까?
  • 이 파일에서이 명령의 손상을 되 돌리는 해결책은 무엇입니까?

    • 답변 # 1

      다음 명령을 사용했습니다

      find ./ -type f -exec sed -i -e 's/_/./g' {} \;
      
      

      이것이 기본적으로하는 것

      sed -i -e 's/_/./g' filename
      
      
      find 가 찾은 각 파일에 대해

       명령. 와이즈 비즈  파일을 한 줄씩 그리고 sed 를 통과합니다.  (대체) 명령, 각 s 를 대체   _ 와 함께 . 그리고 당신이 . 를 사용하고 있기 때문에  플래그, 이것은 인라인으로 발생합니다. 파일이 손상되었다는 것은 놀라운 일이 아닙니다!

      이전 파일은 재생할 수 없습니다. 당신은 -i 를 변경 _  그리고   .. 로 . 아시다시피 각 .  파일에서이 문자 중 하나 (또는 ​​ . )가 될 수 있습니다. ).

      .

  • 이전 networking - 왜 nginx 서버를 중지해도 관련된 프로세스가 종료되지 않습니까?
  • 다음 printing - groff가 해석 된 ANSI 이스케이프 문자로 PS 파일을 작성할 수 있습니까?