更新:如果您赶时间,请查看下面这个脚本的简短版本。
一个简单的 Bash 脚本为你完成这项工作:
#!/bin/bash
for FILE in `find . -name "*.js" -type f -o -path './node_modules' -prune -o -path './components' -prune`
do
if [ -e $FILE ] ; then
COFFEE=${FILE//.js/.coffee}
echo "converting ${FILE} to ${COFFEE}"
js2coffee "$FILE" > "$COFFEE"
else
echo "File: {$1} does not exist!"
fi
done
制作一个文件,例如all2coffee,放到/usr/local/bin,在终端添加chmod + x标志
要求
js2coffee 已全局安装,如果尚未安装,请执行以下操作:npm install -g js2coffee
脚本解释
for 循环:
for FILE in `find arguments` .... 表示:
每次find 偶然发现 .js 文件时,都会将查找输出分配给 FILE 字符串
查找参数:
-name "*.js"抓取所有以.js结尾的文件
-type f 必须是 file 类型,因为我们不需要 .js 目录,而只需要文件
-o -path './node_modules' -prune
排除目录 ./node_modules 中的文件添加 -prune 至关重要,否则 find 将进入目录并打印 *.js在目录中找到的文件
阻止:
if [ -e ${FILE} ] ; then
-e 标志检查来自 FILE 的字符串是否是文件系统上的现有文件,否则将执行 else。
字符串操作:
COFFEE=${FILE//.js/.coffee}
我们将 COFFEE 变量分配给我们替换的字符串
.js 与 .coffee 通过 bash 字符串操作:${STRING//match_this/replace_with}
转化:
js2coffee "$FILE" > "$COFFEE" 我们将 FILE 和 COFFEE 作为 strings
提供给 js2coffee
额外:
您希望将所有转换后的 .coffee 文件移至新目录,但保留结构?
在 Linux 中使用 find 和 rsync 或在 Os X 上使用 ditto,因为 cp 不会
创建此命令所需的目录。这里有一个要执行的小脚本
完成这项工作的主目录
所有 .coffee 文件都将在 /coffee 目录中复制 .js 文件层次结构
for FILE in `find . -name "*.coffee"`
do
ditto .${FILE/./} coffee${FILE/./}
done
在您将文件转换为 .coffee 后执行此操作
更新
您可以在第一次运行后将ditto 或rsync 与mv 交换以移动文件,因为mv 就像cp 一样不会创建子目录。
更新 2
为准时的人添加了一个班轮,请参阅下面的第二个答案!
更新 3
为那些不想转换其依赖项的人添加了一个从转换中排除 ./node_modules 目录的选项