Linux
Linux find exec - 輸出到不同的目錄
我正在嘗試編寫一個簡短的腳本來編輯一些 csv 文件。首先,我需要替換分隔符,然後將編碼更改為 UTF-16。我想分兩步執行此操作,將結果保存在兩個不同的文件夾中,以防出現問題。
第一步(替換分隔符)我已經設法解決了這樣的問題,並且效果很好:
mkdir ./01_delimiters find . -maxdepth 1 -type f -name '*.csv' -exec bash -c 'sed -e "s/|/¦/g" -e "s/╬/|/g" "{}" > ./01_delimiters/"{}"' \;
現在我想從 01_delimiters 文件夾中取出所有文件,更改它們的編碼並將它們保存到文件夾 ./02_encoding 中。我已經嘗試了以下幾個版本,但它不起作用:
mkdir ./02_encoding find ./01_delimiters -maxdepth 1 -type f -name '*.csv' -exec bash -c 'iconv -f utf-8 -t utf-16BE "{}" > ./02_encoding/"{}"' \;
它發現文件沒問題,但會為輸出拋出“沒有這樣的文件或目錄”錯誤。任何想法如何使這項工作?順便說一句,我正在使用 Ubuntu。提前非常感謝!
擔
{}
替換為完整路徑。這在第一個命令中有效,因為那裡的路徑只是./file.csv
. 在第二個命令中,名稱是./01_delimiters/file.csv
,因此它嘗試創建./02_encoding/./01_delimiters/file.csv
。你可以
mkdir /02_encoding/./01_delimiters
,那麼您的輸出文件將被放置在該目錄中。- 在您驗證第一個操作正常工作後,將這兩個操作合併為一個。即使出現問題,您也沒有刪除原始文件。
- 將第二個命令更改為
(cd ./01_delimiters; find . -maxdepth 1 -type f -name '*.csv' -exec bash -c 'iconv -f utf-8 -t utf-16BE "{}" > ../02_encoding/"{}"' \; )
- 只需使用外殼
for file in *.csv; do sed -e "s/|/¦/g" -e "s/╬/|/g" "$file" > "./01_delimiters/$file" iconv -f utf-8 -t utf-16BE "./01_delimiters/$file" > "./02_encoding/$file" done