다음과 같은 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
이에 대한 경고가 표시되지만 중단되지는 않습니다.