리눅스

리눅스

따라서 다음 논리에 따라 압축하고 그룹화하려는 약 20,000개의 파일이 있습니다.

  • 동일한 문자를 가진 모든 파일을 최대로 압축합니다.(
  • 또한(

그래서 파일은 다음과 같습니다

file_123.foo
file_123(abc).foo
file_123(b9)(ca)[a1].foo

foobar(a).foo
foobar.foo
foobar(123).foo

다음으로 압축해야 합니다.

file_123.7z
foobar.7z

나는 Windows 배치 파일, Unix 스크립트 또는 모든 압축 프로그램(여기서 작업할 수 있음)을 사용할 수 있지만 가장 편리한 콤보는 .7z와 Windows입니다.

업데이트

cYrus는 나에게 완벽한 답변을 주었습니다. 문제는 내 질문이 충분히 정확하지 않았다는 것입니다 :) 이제 더 똑똑해졌으니 아직 해결 방법을 찾지 못한 다음 문제 세트는 다음과 같습니다.

따라서 이런 일이 발생하지 않는 한 모든 것이 완벽하게 작동합니다.

file_123(abc).foo
file_123456789(b9).foo

이 두 개는 그룹화되어서는 안 됩니다. 즉, 두 개의 별도 파일로 끝나야 합니다.

file_123.7z
file_123456789.7z

이 하나:

for pfx in $(for i in *.foo; do echo "${i%%[.(]*}"; done | sort -u); do 7z a "$pfx.7z" $pfx*; done

이 두 개를 별도로 생성하고하지만더 짧은 파일은 포괄적으로 작동합니다. 즉, file_123.7z두 파일을 모두 포함하면 안 됩니다.

답변1

리눅스

이것은 작동합니다:

for pfx in $(for i in *.foo; do echo "${i%%[.(]*}"; done | sort -u); do 7z a "$pfx.7z" $pfx[.\(]*; done

설명

먼저 입력 파일( ) 전체를 반복하고 *.foo접미사( ${i%%[.(]*})를 제거하여 다음을 얻습니다.

file_123
file_123
file_123
foobar
foobar
foobar

그런 다음 다음을 사용하여 중복을 제거할 수 있습니다 sort -u.

file_123
foobar

마지막으로 각 접두사( $pfx)에 대해 접두사 자체를 아카이브 이름( "$pfx.7z")과 파일을 식별하는 패턴( $pfx[.\(]*)으로 사용하여 아카이브를 구축할 수 있습니다. 다음과 같은 결과를 얻습니다:

7z a file_123.7z 'file_123(abc).foo' 'file_123(b9)(ca)[a1].foo' 'file_123.foo'
7z a foobar.7z 'foobar(123).foo' 'foobar(a).foo' 'foobar.foo'

답변2

좋습니다. 쉘 스크립트만 제공하는 대신 7zips 컨텍스트 메뉴를 보여 드리겠습니다.

1 단계: 이 모든 파일이 들어 있는 폴더를 엽니다.

2 단계: "이름"을 클릭하면 모든 파일을 이름별로 정렬합니다(이렇게 하면 비슷한 이름으로 시작하는 파일을 쉽게 선택할 수 있습니다).

3단계: 와 더불어오른쪽마우스 버튼을 누르고 단일 파일로 압축하려는 모든 파일 위에 선택 상자를 끌어다 놓습니다(따라서 foobar(a).foo, foobar.foo ,foobar(123).foo ).

4단계: 마우스 오른쪽 버튼을 놓으면 컨텍스트 메뉴가 나타납니다. 7Zip으로 이동 > PARENT_DIRECTORY.7z에 추가

여기서 PARENT_DIRECTORY는 이러한 파일이 있는 폴더의 이름입니다. 따라서 현재 있는 폴더가 'files'라고 하면 해당 파일이 'files.7z'에 추가됩니다.

5단계: 새 7Zip 파일을 마우스 오른쪽 버튼으로 클릭하고 '이름 바꾸기'를 클릭하여 새 압축 파일의 이름을 바꿉니다.

관련 정보