命令行sorcerery

我有一个目录完整的.xls文件,我想要转换为.csv。 我正在使用xls2csv。 这个命令只打印出csv到屏幕上,所以我相信你必须做xls2csv(xls文件)>(新文件).csv。 所以为此我需要写一个循环。

for f in `ls`; do xls2csv > `rev $f` | cut -d "." | rev | echo ".csv" 

这是我到目前为止,它不起作用。 我只是希望你能明白我上面的例子想要做什么。

 for f in *.xls; do basename="${f%.xls}" csvname="$basename.csv" xls2csv "$f" > "$csvname" done 

[更新]修正了错字,以便实际使用$basename 。 谢谢。

GNU并行有一个这样的功能:{。}这是原始的字符串,但删除了.extension:

 ls | parallel xls2csv {} ">" {.}.csv 

另外,如果您有多个CPU,则可以获得额外的xls2csv并行运行奖励。 它也处理正确的文件名称,如:

 My Brother's 12" records.xls 

要了解更多,请观看介绍视频: http : //www.youtube.com/watch?v = OpaiGYxkSuQ

 for f in *; do c=`echo $f | sed 's/.xls$/.csv/'` xls2csv $f >$c done 

您应该使用-s开关签出basename命令。

(我想你正在使用rev来反转文件名 – 是吗?我删除了它。)

 for f in `ls`; do xls2csv $f > `basename -s xls $f`csv; done 

试试看 我不知道如果xls2csv是破坏性的(如sed),所以备份你的目录。

尝试这个

 type=".csv"; for f in `ls -1`; do file=`echo $f|cut -d '.' -f1` file=${file}${type} `xls2csv $f > $file` done