각 파일의 내용을 사용하여 많은 파일에 확장자를 추가하는 방법은 무엇입니까?

각 파일의 내용을 사용하여 많은 파일에 확장자를 추가하는 방법은 무엇입니까?

이전 버전의 Mac OS에서 확장자가 없는 파일이 10,000개 이상 있습니다. 그것들은 파일 구조에 극도로 중첩되어 있으며 온갖 종류의 이상한 형식과 문자도 가지고 있습니다. 더 이상 파일 형식이나 작성자 코드가 첨부되어 있지 않습니다. 이러한 파일 중 다수에는 확장자를 결정할 수 있는 텍스트가 파일에 포함되어 있습니다(예를 들어 Word.Document.8은 해당 Word 버전에서 생성된 모든 파일의 텍스트에 있습니다).

한 번에 이러한 파일 형식 중 하나에 대해 작동할 것처럼 보이는 스크립트를 찾았지만, 파일 이름의 일부를 사악한 문자 다음에 삭제하므로 이는 좋지 않습니다.

find . -type f -not -name "*.*" -print0 |\
    xargs -0 file |\
    grep  'Word.Document.8' |\
    sed 's/:.*//' |\
    xargs -I % echo mv % %.doc

먼저 파일 이름의 문자를 정리해야 합니까, 아니면 동일하게 유지하기 위해 스크립트의 문자를 프로그래밍 방식으로 처리해야 합니까? 파일 이름에서 정보를 잃지 않는 한 슬래시 및 기타 문제 문자를 정리하는 데 문제가 발생하지 않습니다. 또한 파일 이름을 정리하면 중복될 가능성이 높으므로 모든 정리 스크립트는 손실되지 않도록 확장자 앞에 "-1"과 같은 것을 추가해야 합니다.

나는 이 대본에 얽매이지 않지만 이해할 수 있습니다. 이는 프로입니다. Mac OS X 10.6이 이 파일 서버에 설치되어 있지만 최신 버전의 OS X에 액세스할 수 있습니다.

답변1

아직 질문을 100% 이해하지는 못하지만 몇 가지 생각을 해보겠습니다.

  1. sed 's/:.*//'콜론이 있는 파일 이름은 모두 엉망이 됩니다. 콜론은 Mac에서 유효한 파일 이름 문자입니까? 그렇지 않다면 이것은 당신에게 문제가 되지 않을 것입니다. 그렇지 않으면 sed 's/: Word.Document.8$//'또는을 수행하는 것을 고려하십시오. sed 's/: [^:]*$//'.
  2. mv에서 생성된 명령 에 xargs문제가 있는 것 같습니다. 노력하다
    xargs -I % sh -c 'echo mv "%" "%.doc"'.

답변2

두 번째 질문은 동시에 두 개 이상의 파일 형식을 찾고 각각에 적절한 확장자를 제공하도록 스크립트를 어떻게 변경합니까?

시작하는 데 도움이 되는 몇 가지 힌트는 다음과 같습니다.

sed -e '/Word\.Document\.8/s/무엇/다른 것/;에스/또 다른/또 다른/' \
    -e '/Excel\.Sheet\.8/s/뭔가 2/다른 것 2/;에스/또 다른 2/또 다른 2/' \
    ...

또는

어이쿠'
      /워드\.문서\.8/ {
            Word용 awk 명령
      }
      /Excel\.Sheet\.8/ {
            Excel용 awk 명령
      }
          
'

관련 정보