在bash裡面呼叫外部程式還有重組字串? - Linux

Frederic avatar
By Frederic
at 2016-01-27T17:38

Table of Contents

=======問題已解 回饋code給大家以後用=========
感謝各位大大細心的分享跟教導,這隻小script分享給
之後跟我一樣有大量xlsx轉csv的人,使用方法只要
sh script.sh "存取資料夾"
便會把你該資料夾所有xlsx轉成csv檔

但記得要裝 python的xlsx2csv
參考: sudo pip install xlsx2csv

========ˇscript============
#!/bin/bash
# this script have dependence package of Python "xlsx2csv"
sudo PATH =
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:~/bin
sudo export PATH
sudo echo "Start translate !"
mkdir $1
for f in `ls -1 *.xlsx`
do
xlsx2csv $f $1/${f%.*}.csv;
echo ${f%.*}
done
echo "Translation done"
~
==============================================

由於對linux 的bash一些比較特殊的寫法還不是那麼熟練
想跟各位linux先進請教一個寫bash時的問題

想做的事情是:
用bash的方式進行xlsx轉檔,這裡我呼叫了一個python
工具 xlsx2csv , 這個用法在 terminal時已經確定可以
使用 , 而且轉換效果很好

遇到的問題:
1. 一直出現中文檔名亂碼問題 , 原始檔案是big5沒錯
2. 不確定這麼寫能不能像teminal一樣直接叫到python
的xlsx2csv

錯誤範例:
========================================================================
#!/bin/bash
PATH = /bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
sudo echo "Start translate !"
sudo xlsx2csv 2011某中文檔名.xlsx Test_covert/2011某中文檔名.csv
echo "Translation done"
=======================================================================

這只是我在做初步測試用bash 仿製我在terminal做的行為,且在terminal已經確定
會有我要的結果 , 但bash上面我一直沒有確切的方向,查也都只查到bash的一般語法
會需要這麼做主要是會批量轉檔的需求,所以後續還要串loop還有讓檔名重新產生

用過一般的批量轉檔程式但出來的結果是資料 "看起來" 沒有任何問題,但一旦經過
任何程式呼叫後 , 會有大量的資料在呼叫過程中無故遺失,而用command line呼叫手轉
的資料則沒有這問題

雖然可以另外寫python code直接做這件事情,但目前我試過最快且最穩的是command line
這個方法,加上很想知道如果我在 bash 裡面要呼叫非一般shell的程式還有做字串重組
跟commnad重新產生 (有點像eval 但我還不確定bash叫什麼) , 對小弟來說算是一個有趣
的應用,想問各位先進是否有做過這件事情 ???

--
Tags: Linux

All Comments

Faithe avatar
By Faithe
at 2016-01-28T10:20
for f in `ls -1 *.xlsx`
Donna avatar
By Donna
at 2016-01-31T05:17
do xlsx2cxv $f Test_convert/${f%.*}.csv
問的是這種嗎 ?
啊 少了 done
Irma avatar
By Irma
at 2016-02-05T01:47
關於字串改寫可以參考 bash manpage 的 Parameter Expansion
Ethan avatar
By Ethan
at 2016-02-06T18:56
真不愧是CP64大師<(_ _)>
Kama avatar
By Kama
at 2016-02-09T11:14
感謝CP64大大,我可以叫到我要的檔案了,不過shell問題我
Hedda avatar
By Hedda
at 2016-02-10T11:34
還沒搞定,會一直顯示找不到 xlsx2csv的方法,我還在研究
怎麼得到一般操作的完整shell PATH 資訊
Faithe avatar
By Faithe
at 2016-02-11T07:34
你下個 sudo env 看輸出應該就會知道發生啥事了
George avatar
By George
at 2016-02-12T04:17
你的 sudo 吃不到你下的 PATH
Joseph avatar
By Joseph
at 2016-02-14T07:22
不過有點好奇有需要用 sudo 嗎? 何不產在 /tmp 再搬過去
Ina avatar
By Ina
at 2016-02-15T17:38
小弟算新手,最近越來越受不了windows的command怒切了點
Oscar avatar
By Oscar
at 2016-02-18T01:26
空間裝linux,大概用一個禮拜已經愛上了 XD
最近還在拜讀鳥哥的文章,但其實很多觀念還在建立
Brianna avatar
By Brianna
at 2016-02-19T15:58
常常用sudo是因為有時候對一些指令還不熟悉,偏偏需要權
限, 不過我現在還有點茫 因為兩個 PATH是一樣的
Audriana avatar
By Audriana
at 2016-02-21T12:03
感覺轉換程式應該是不至於用到 sudo 的
Agnes avatar
By Agnes
at 2016-02-23T01:38
啊 不對 我看錯了一點東西
Necoo avatar
By Necoo
at 2016-02-24T10:10
path問題解掉了,現在在解令一個執行噴錯 XD
Necoo avatar
By Necoo
at 2016-02-26T03:04
現在執行成功了,但原本的檔名encoding問題又回來了
Tristan Cohan avatar
By Tristan Cohan
at 2016-02-26T05:10
成功呼叫到xlsx2csv,但是檔名encoding問題跑出來了
Christine avatar
By Christine
at 2016-02-27T21:01
現在是轉完的檔名會亂碼嗎? 還是檔名亂碼導致讀不到檔?
Tristan Cohan avatar
By Tristan Cohan
at 2016-03-03T18:58
檔名亂碼導致xlsx2csv在讀檔階段噴錯,我現在在查要怎麼
Jack avatar
By Jack
at 2016-03-04T14:04
在bash裡面做一部分字串的轉碼
Emily avatar
By Emily
at 2016-03-06T11:32
建議用 iconv
Mary avatar
By Mary
at 2016-03-06T23:50
啊 應該是說用 convmv
先把檔名轉一轉
Delia avatar
By Delia
at 2016-03-08T20:06
下午我在試時 iconv 我撞到xlsx不知道要怎麼處理 QQ
Jack avatar
By Jack
at 2016-03-13T01:47
convmv 是還沒弄懂下法 現在在試 QQ
Ingrid avatar
By Ingrid
at 2016-03-16T07:24
有幾個問題確認一下:
Isabella avatar
By Isabella
at 2016-03-19T09:41
1. 一開始問題,你 script 的變數語法宣告有問題
PATH=path1:path2:path3 這樣子,= 符號兩邊不可以空白
Charlie avatar
By Charlie
at 2016-03-22T22:30
2. 你改了 PATH 變數,不一定會讓 sudo 執行時候套用
Joe avatar
By Joe
at 2016-03-25T12:39
不小心按到「噓」的選項 -.-"
3. sudo 的 PATH 很多解法,一般最簡單可以改目的帳號
Olivia avatar
By Olivia
at 2016-03-29T06:57
的 shell 設定檔案設定,後續使用 sudo -i 方式來執行
吃目的身份的 shell 初始化環境設定配置就可以了
Jessica avatar
By Jessica
at 2016-04-03T03:03
4. 你的當下語系是 zh_tw.Big5 還是 zh_TW.UTF8 呢
執行 locale 看一下 LANG 與 LC_ALL 變數確認一下
David avatar
By David
at 2016-04-07T08:40
目前這個年代應該不大會預設使用 zh_TW.Big5 這類編碼
Edwina avatar
By Edwina
at 2016-04-10T17:41
不過還是可以確認一下比較好確認問題點
至於樓上其他朋友提到 convmv 主要是解決檔名的編碼
Harry avatar
By Harry
at 2016-04-11T09:39
與所處使用的語系編碼不同的檔案名稱修改工具
一般大多用於 file server 可能以往是使用 Big5 的編碼
後續系統預設 locale 改成 utf8 這類,系統的程式要
Hazel avatar
By Hazel
at 2016-04-15T22:36
能夠正常識別顯示,尤其像是 samba 這類就顯得重要
Anonymous avatar
By Anonymous
at 2016-04-20T13:59
感謝兩位大大的講解,我設定是全utf8,convmv我有看過討
論改檔名的事情,只是我需要的是批量改檔名,所以我還在
Harry avatar
By Harry
at 2016-04-24T04:40
摸索,由於取得資料的資料源全都是萬惡MS的big5,最小單
位的資料大概都會到30檔案,每個檔案約有數萬比資料
Kelly avatar
By Kelly
at 2016-04-25T06:44
所以小弟linux新手得越級打怪 QQrz 我是先手動轉檔處理
Andy avatar
By Andy
at 2016-04-30T05:48
很迫切要的前二十多份,但類似的問題我覺得還會遇到所以
有點越級打怪還是來跟大家請教了 QQ
Susan avatar
By Susan
at 2016-05-05T04:26
雖然可以load到python裡面然後再做轉檔,但我目前試速度
最快效果最好的方式是直接讓shell叫,用shell default的
Andrew avatar
By Andrew
at 2016-05-07T11:19
語系跳過python我要處理open read & write的問題直接轉
Delia avatar
By Delia
at 2016-05-08T12:24
不過還是沒看出來你轉檔失敗的主要問題點在哪
Zenobia avatar
By Zenobia
at 2016-05-09T06:23
目前你 script 改好程式碼內容怎樣,執行跑有錯誤嗎
那錯誤訊息要給一下要不然還是有點困惑
Bethany avatar
By Bethany
at 2016-05-11T19:53
看不出來是 shell script 還是 python script 的問題
Kama avatar
By Kama
at 2016-05-16T12:07
它輸出 xlsx2csv 出現執行錯誤,而執行噴錯內容就是常見
Ivy avatar
By Ivy
at 2016-05-21T11:22
的big5碼,並表示這些字元在裡面是不允許的,所以我覺得
Belly avatar
By Belly
at 2016-05-21T19:04
是檔名編碼問題,過去傳資料進方法或函數跳此類錯誤都是
把encoding處理好就解掉了
Annie avatar
By Annie
at 2016-05-25T05:30
所以你系統還是使用 big5 的 locale 環境?
Daph Bay avatar
By Daph Bay
at 2016-05-26T02:17
UTF8是資料源的機構是全面big5+excel,兩個讓我頭大的
Irma avatar
By Irma
at 2016-05-26T14:42
東西,big5 要轉碼 excel會把讀檔時間拉長
所以我是在系統內直接做轉檔,因為我default是utf8所以
Skylar Davis avatar
By Skylar Davis
at 2016-05-28T11:40
xlsx2csv會自動幫我轉成utf8
Annie avatar
By Annie
at 2016-05-29T04:25
第一句話沒打好 我是utf8 取資料單位是全面big5
Daph Bay avatar
By Daph Bay
at 2016-05-29T05:30
「which xlsx2csv」看看那東西到底有沒有在你新寫的PATH裡?
Madame avatar
By Madame
at 2016-06-02T16:09
也可以先在script內「source ~/.bashrc」看看能不能正常跟
terminal一樣動,這個指令就是載入你的.bashrc那些變數
Suhail Hany avatar
By Suhail Hany
at 2016-06-06T18:08
放在行頭可能有效,不肯定@@
檔頭第1行
Aaliyah avatar
By Aaliyah
at 2016-06-06T20:47
感謝H大,不過PATH的問題已經解了,現在在解中文檔名編碼
Anthony avatar
By Anthony
at 2016-06-11T07:19
呃 後來查了一下 設定 PATH 的地方不用 sudo
也不能用 sudo 因為那是 bash 的內建功能 sudo 不吃
之前那邊誤導到了不好意思 @@
Ida avatar
By Ida
at 2016-06-16T00:09
就只要 PATH=$PATH:~/bin; export PATH; 就可以了
Agatha avatar
By Agatha
at 2016-06-16T10:07
如果說要確定 sudo 有吃到你前面下的變數用 sudo -E

nautilus rename 檔名消失

Ina avatar
By Ina
at 2016-01-27T14:33
這個問題困擾一段時間了,甚至是換了臺電腦重新安裝Ubuntu之後依舊。 OS: Ubuntu 15.10 Desktop: Gnome 去年不曉得何時開始,在nautilus中用F2要rename檔名的時候,檔名會主動清空, 只會留下副檔名。在檔案上面右鍵 -andgt; Properties,檔名也會消 ...

chrome即將對linux停止更新???

Christine avatar
By Christine
at 2016-01-26T21:31
各位前輩好, 我今天打開chrome 忽然出現了這段警告文字 google chrome將停止支援這種linux系統 因此這部電腦很快就不會再收到google chrome更新 http://imgur.com/fqjRnpF 小弟我的系統是xubuntu 14.04 有其他大大也收到同樣的警告嗎? ...

安裝I2C-tools相依關係失敗

Oliver avatar
By Oliver
at 2016-01-26T16:44
大家好,小弟剛接觸Linux不久 在研究SPD的時候發現一個TOOL叫I2C-tools 可以讀取機器的一些資訊 但是我在下RPM的時候總是遇到相依關係失敗的訊息 如圖: http://i.imgur.com/Zv7RRT4.jpg apt-get update 和 apt-get upgrade ...

怎麼取得連到AP的clients的SNR?

Noah avatar
By Noah
at 2016-01-26T01:43
我有一台無線AP,firmware是OpenWRT 假設有兩台手機連到此AP,我想知道這兩台手機的SNR是多少 在OpenWRT的網頁介面Luci裡,可以看到每個client的signal和noise。 但我想知道如果我使用ssh連到ap裡面, 我應該在哪裡取得這些資訊 謝謝 - ...

能否推薦主機板?

Gary avatar
By Gary
at 2016-01-25T20:28
小弟最近想組一台PC 目前手中有CentOS7.X 但怕某些廠牌的主機板會不支援 不知道各位是否能給小弟一些推薦主機板或建議 誠感謝 ----- Sent from JPTT on my HTC One 801e. - ...