Bash
從文件名中刪除正則表達式,同時管道它們
我正在將大量文件從
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
命令進行測試,可能會導致數據失去。