Linux 板


LINE

=======问题已解 回馈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叫什麽) , 对小弟来说算是一个有趣 的应用,想问各位先进是否有做过这件事情 ??? --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.109.196.140
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Linux/M.1453887490.A.485.html
1F:→ CP64: for f in `ls -1 *.xlsx` 01/27 18:04
2F:→ CP64: do xlsx2cxv $f Test_convert/${f%.*}.csv 01/27 18:05
3F:→ CP64: 问的是这种吗 ? 01/27 18:05
4F:→ CP64: 啊 少了 done 01/27 18:05
5F:→ CP64: 关於字串改写可以参考 bash manpage 的 Parameter Expansion 01/27 18:08
6F:→ tjjh89017: 真不愧是CP64大师<(_ _)> 01/27 18:18
7F:→ JackBaska: 感谢CP64大大,我可以叫到我要的档案了,不过shell问题我 01/27 20:55
8F:→ JackBaska: 还没搞定,会一直显示找不到 xlsx2csv的方法,我还在研究 01/27 20:56
9F:→ JackBaska: 怎麽得到一般操作的完整shell PATH 资讯 01/27 20:56
10F:→ CP64: 你下个 sudo env 看输出应该就会知道发生啥事了 01/27 21:13
11F:→ CP64: 你的 sudo 吃不到你下的 PATH 01/27 21:14
12F:→ CP64: 不过有点好奇有需要用 sudo 吗? 何不产在 /tmp 再搬过去 01/27 21:18
13F:→ JackBaska: 小弟算新手,最近越来越受不了windows的command怒切了点 01/27 21:20
14F:→ JackBaska: 空间装linux,大概用一个礼拜已经爱上了 XD 01/27 21:21
15F:→ JackBaska: 最近还在拜读鸟哥的文章,但其实很多观念还在建立 01/27 21:21
16F:→ JackBaska: 常常用sudo是因为有时候对一些指令还不熟悉,偏偏需要权 01/27 21:22
17F:→ JackBaska: 限, 不过我现在还有点茫 因为两个 PATH是一样的 01/27 21:22
18F:→ CP64: 感觉转换程式应该是不至於用到 sudo 的 01/27 21:26
19F:→ CP64: 啊 不对 我看错了一点东西 01/27 21:27
20F:→ JackBaska: path问题解掉了,现在在解令一个执行喷错 XD 01/27 21:27
21F:→ JackBaska: 另 01/27 21:27
22F:→ JackBaska: 现在执行成功了,但原本的档名encoding问题又回来了 01/27 21:28
23F:→ JackBaska: 成功呼叫到xlsx2csv,但是档名encoding问题跑出来了 01/27 21:29
24F:→ CP64: 现在是转完的档名会乱码吗? 还是档名乱码导致读不到档? 01/27 21:33
25F:→ JackBaska: 档名乱码导致xlsx2csv在读档阶段喷错,我现在在查要怎麽 01/27 21:34
26F:→ JackBaska: 在bash里面做一部分字串的转码 01/27 21:35
27F:→ CP64: 建议用 iconv 01/27 21:36
28F:→ CP64: 啊 应该是说用 convmv 01/27 21:38
29F:→ CP64: 先把档名转一转 01/27 21:38
30F:→ JackBaska: 下午我在试时 iconv 我撞到xlsx不知道要怎麽处理 QQ 01/27 21:46
31F:→ JackBaska: convmv 是还没弄懂下法 现在在试 QQ 01/27 21:47
32F:→ kenduest: 有几个问题确认一下: 01/28 00:03
33F:→ kenduest: 1. 一开始问题,你 script 的变数语法宣告有问题 01/28 00:04
34F:→ kenduest: PATH=path1:path2:path3 这样子,= 符号两边不可以空白 01/28 00:04
35F:嘘 kenduest: 2. 你改了 PATH 变数,不一定会让 sudo 执行时候套用 01/28 00:11
36F:→ kenduest: 不小心按到「嘘」的选项 -.-" 01/28 00:12
37F:→ kenduest: 3. sudo 的 PATH 很多解法,一般最简单可以改目的帐号 01/28 00:12
38F:→ kenduest: 的 shell 设定档案设定,後续使用 sudo -i 方式来执行 01/28 00:13
39F:→ kenduest: 吃目的身份的 shell 初始化环境设定配置就可以了 01/28 00:13
40F:推 kenduest: 4. 你的当下语系是 zh_tw.Big5 还是 zh_TW.UTF8 呢 01/28 00:15
41F:→ kenduest: 执行 locale 看一下 LANG 与 LC_ALL 变数确认一下 01/28 00:15
42F:→ kenduest: 目前这个年代应该不大会预设使用 zh_TW.Big5 这类编码 01/28 00:16
43F:→ kenduest: 不过还是可以确认一下比较好确认问题点 01/28 00:17
44F:→ kenduest: 至於楼上其他朋友提到 convmv 主要是解决档名的编码 01/28 00:17
45F:→ kenduest: 与所处使用的语系编码不同的档案名称修改工具 01/28 00:18
46F:→ kenduest: 一般大多用於 file server 可能以往是使用 Big5 的编码 01/28 00:18
47F:→ kenduest: 後续系统预设 locale 改成 utf8 这类,系统的程式要 01/28 00:18
48F:→ kenduest: 能够正常识别显示,尤其像是 samba 这类就显得重要 01/28 00:19
49F:→ JackBaska: 感谢两位大大的讲解,我设定是全utf8,convmv我有看过讨 01/28 00:29
50F:→ JackBaska: 论改档名的事情,只是我需要的是批量改档名,所以我还在 01/28 00:29
51F:→ JackBaska: 摸索,由於取得资料的资料源全都是万恶MS的big5,最小单 01/28 00:31
52F:→ JackBaska: 位的资料大概都会到30档案,每个档案约有数万比资料 01/28 00:31
53F:→ JackBaska: 所以小弟linux新手得越级打怪 QQrz 我是先手动转档处理 01/28 00:32
54F:→ JackBaska: 很迫切要的前二十多份,但类似的问题我觉得还会遇到所以 01/28 00:33
55F:→ JackBaska: 有点越级打怪还是来跟大家请教了 QQ 01/28 00:33
56F:→ JackBaska: 虽然可以load到python里面然後再做转档,但我目前试速度 01/28 00:35
57F:→ JackBaska: 最快效果最好的方式是直接让shell叫,用shell default的 01/28 00:35
58F:→ JackBaska: 语系跳过python我要处理open read & write的问题直接转 01/28 00:36
59F:→ kenduest: 不过还是没看出来你转档失败的主要问题点在哪 01/28 00:43
60F:→ kenduest: 目前你 script 改好程式码内容怎样,执行跑有错误吗 01/28 00:44
61F:→ kenduest: 那错误讯息要给一下要不然还是有点困惑 01/28 00:44
62F:→ kenduest: 看不出来是 shell script 还是 python script 的问题 01/28 00:45
63F:→ JackBaska: 它输出 xlsx2csv 出现执行错误,而执行喷错内容就是常见 01/28 00:46
64F:→ JackBaska: 的big5码,并表示这些字元在里面是不允许的,所以我觉得 01/28 00:47
65F:→ JackBaska: 是档名编码问题,过去传资料进方法或函数跳此类错误都是 01/28 00:48
66F:→ JackBaska: 把encoding处理好就解掉了 01/28 00:48
67F:→ kenduest: 所以你系统还是使用 big5 的 locale 环境? 01/28 00:55
68F:→ JackBaska: UTF8是资料源的机构是全面big5+excel,两个让我头大的 01/28 01:35
69F:→ JackBaska: 东西,big5 要转码 excel会把读档时间拉长 01/28 01:36
70F:→ JackBaska: 所以我是在系统内直接做转档,因为我default是utf8所以 01/28 01:36
71F:→ JackBaska: xlsx2csv会自动帮我转成utf8 01/28 01:37
72F:→ JackBaska: 第一句话没打好 我是utf8 取资料单位是全面big5 01/28 01:38
73F:推 Hevak: 「which xlsx2csv」看看那东西到底有没有在你新写的PATH里? 01/28 07:30
74F:→ Hevak: 也可以先在script内「source ~/.bashrc」看看能不能正常跟 01/28 07:31
75F:→ Hevak: terminal一样动,这个指令就是载入你的.bashrc那些变数 01/28 07:31
76F:→ Hevak: 放在行头可能有效,不肯定@@ 01/28 07:32
77F:→ Hevak: 档头第1行 01/28 07:32
78F:→ JackBaska: 感谢H大,不过PATH的问题已经解了,现在在解中文档名编码 01/28 08:13
※ 编辑: JackBaska (140.109.196.140), 02/01/2016 17:21:18
79F:→ CP64: 呃 後来查了一下 设定 PATH 的地方不用 sudo 02/02 00:32
80F:→ CP64: 也不能用 sudo 因为那是 bash 的内建功能 sudo 不吃 02/02 00:32
81F:→ CP64: 之前那边误导到了不好意思 @@ 02/02 00:32
82F:→ CP64: 就只要 PATH=$PATH:~/bin; export PATH; 就可以了 02/02 00:43
83F:→ CP64: 如果说要确定 sudo 有吃到你前面下的变数用 sudo -E 02/02 00:44







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BabyMother站内搜寻

TOP