bash 파일을 iso-latin-1
(일명 iso-8859-1
)에서 utf-8
. 그리고, 오류가 발생하기 쉬운 파일 이름의 형식을 변경하는 기회를 갖고 싶습니다.
해당 파일의 이름은 다음과 같습니다.
tree Dados/Jan/
Dados/Jan/
├── 201301_Licitacoes
│ ├── 201301_EmpenhosRelacionados.csv
│ ├── 201301_ItemLicitaЗ╞o.csv
│ ├── 201301_LicitaЗ╞o.csv
│ └── 201301_ParticipantesLicitaЗ╞o.csv
├── 201401_Licitacoes
│ ├── 201401_EmpenhosRelacionados.csv
│ ├── 201401_ItemLicitaЗ╞o.csv
│ ├── 201401_LicitaЗ╞o.csv
│ └── 201401_ParticipantesLicitaЗ╞o.csv
├── 201501_Licitacoes
│ ├── 201501_EmpenhosRelacionados.csv
│ ├── 201501_ItemLicitaЗ╞o.csv
│ ├── 201501_LicitaЗ╞o.csv
│ └── 201501_ParticipantesLicitaЗ╞o.csv
├── 201601_Licitacoes
│ ├── 201601_EmpenhosRelacionados.csv
│ ├── 201601_ItemLicitaЗ╞o.csv
│ ├── 201601_LicitaЗ╞o.csv
│ └── 201601_ParticipantesLicitaЗ╞o.csv
(...)
나는 다음을 수행하고 있습니다 :
find Dados/Jan/ -maxdepth 2 -name '*.csv' -exec sh -c 'conv {}' \;
그 중에는 conv
다음 스크립트가 있습니다.
#!/usr/bin/env bash
## adapted from https://stackoverflow.com/questions/62918711/convert-multiple-csv-files-to-utf-8-encoding-using-a-script-windows-command-prom
for file in $@; do
iconv -f ISO-8859-1 UTF-8 <"$file" >"$file".tmp &&
mv "$file.tmp" "$file"
done
이 과정에서 '를 삭제하고 싶습니다.З╞o"파일 압축을 풀면 파일 이름에 텍스트가 표시됩니다(누군가가 이것을 사용했을 수도 있음)"~"파일 이름 등).
답변1
mv
파일을 최종 대상으로 전송할 때 쉘 "매개변수 확장"을 사용하십시오. 좋다
mv "$file.tmp" "${file//З╞o}"
항상 같은 문자 순서인가요?
답변2
bash
"패턴 대체"(읽기 )를 사용 man bash
하고 다음을 수행하십시오.
echo mv "$file.tmp" "${file/3|-o//}"
echo
결과가 마음에 들면 삭제하세요. 테스트를 위해 실제 mv
명령을 사용하지 마십시오. 데이터가 손실될 수 있습니다.
답변3
가장 그럴듯한 LicitaЗ╞o
의미는 Licitação
이것이 "Liitation"을 뜻하는 포르투갈어라는 것입니다.
다음을 사용하여 하드 변환을 수행할 수 있습니다 ${var//icitaЗ╞o/icitação}
.
for file in "$@"; do
filedest="${file//icitaЗ╞o/icitação}"
iconv -f ISO-8859-1 UTF-8 <"$file" >"$file".tmp &&
mv "$file.tmp" "$filedest"
[[ $file != $filedest ]] && rm "$file"
done
답변4
변환된 파일을 원하는 대상 파일명으로 쓰고 원본 파일을 삭제합니다.
for file in "$@"
do
iconv -f ISO-8859-1 -t UTF-8 <"$file" >"${file/З╞o/}" &&
rm -f -- "$file"
done
또한 "$@"
이제 큰따옴표로 묶여 있습니다. 이는 (잘못으로) 처럼 보이지 않도록 하기 위해 필요합니다 $*
.
마지막으로 find
스크립트가 여러 매개변수를 허용하므로 단순화될 수 있습니다.
find Dados/Jan/ -maxdepth 2 -name '*.csv' -exec conv {} +