공통 접두사를 공유하기 위해 파일을 함께 압축

공통 접두사를 공유하기 위해 파일을 함께 압축

다음과 같은 scsv 파일이 포함된 디렉토리가 있습니다.

file1.scsv
file1_key.scsv
file1_flag.scsv
file1_typelist.scsv
files2.scsv
filass3.scsv
file4.scsv
file4_key.scsv
file4_flag.scsv
file5.scsv

file1즉 , 접두사로 files2, 등이 있습니다 filass3. 접두사 길이는 매우 다양하므로 신뢰할 수 없습니다. 접미사 _key, _flag_typelist는 항상 동일하며 변경되지 않습니다.

다음과 같이 압축하고 싶습니다.

file1.zip 
     #contains 
     file1.scsv
     file1_key.scsv
     file1_flag.scsv
     file1_typelist.scsv
files2.zip 
     #contains 
     files2.scsv
filass3.zip 
     #contains 
     filass3.scsv
file4.zip 
     #contains 
     file4.scsv
     file4_key.scsv
     file4_flag.scsv
file5.zip 
     #contains 
     file5.scsv

나는 bash/linux를 처음 접했기 때문에 다음을 시도했습니다.이름은 같지만 확장자가 다른 파일을 압축하는 방법은 무엇입니까?예를 들어, 이는 파일의 확장자 앞에 정확히 동일한 이름이 있다고 가정합니다.

답변1

나는 가정한다

files2.zip 
     #contains 
     files2.scsv
filass3.zip 
     #contains 
     filass3.scsv

허용됩니다. 그렇지 않으면 파일 이름 변환 규칙을 명확히 해야 합니다.

for file in *.scsv; do
  if [[ ! "$file" =~ _ ]]; then
    base="${file%.scsv}"
    zip -9 "${base}.zip" "${file}" "${base}_*.scsv"
  fi
done

.scsv이름과 함께 확장명이 있는 모든 파일을 살펴봅니다 .아니요"_"를 포함하고 해당 파일과 동일한 접두어 뒤에 밑줄이 오는 다른 파일을 포함하는 이름을 딴 ZIP 파일을 만듭니다( 로 대체 .zip) ..scsv

여기에 약간의 트릭이 있습니다. zip추가할 다른 파일이 없을 때 처리 문제를 피하기 위해 쉘의 와일드카드 처리 대신 와일드카드 처리에 의존합니다. zip이에 대한 경고가 표시되지만 중단되지는 않습니다.

관련 정보