Bash

從文件名中刪除正則表達式,同時管道它們

  • January 5, 2022

我正在將大量文件從iso-latin-1(aka, 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 ”文本,當我解壓縮文件時(可能有人在文件名等上使用了“ ~ ”)。

mv將文件 ing 到最終目的地時使用 shell “參數擴展” 。喜歡

mv "$file.tmp" "${file//З╞o}"

它總是相同的字元序列嗎?

使用bash的“模式替換”(讀取man bash)並執行以下操作:

echo mv "$file.tmp" "${file/3|-o//}"

echo如果您喜歡結果,請刪除。切勿使用實際mv命令進行測試,可能會導致數據失去。

引用自:https://unix.stackexchange.com/questions/684859