【发布时间】:2016-02-05 18:35:23
【问题描述】:
我正在使用 2to3 来修复我的脚本库,它似乎是命令行的东西,而不是 shell 的东西。
我想从 /home/me/scripts 向下执行所有文件,假设它们以 .py 结尾。有没有一种简单的方法可以为 shell 中我的文件夹下的每个文件执行 2to3 -y 文件名?
【问题讨论】:
标签: python linux bash python-2to3
我正在使用 2to3 来修复我的脚本库,它似乎是命令行的东西,而不是 shell 的东西。
我想从 /home/me/scripts 向下执行所有文件,假设它们以 .py 结尾。有没有一种简单的方法可以为 shell 中我的文件夹下的每个文件执行 2to3 -y 文件名?
【问题讨论】:
标签: python linux bash python-2to3
有find 命令:
find /home/me/scripts -iname "*.py" -exec 2to3 {} \;
-exec 参数告诉它执行该参数之后的命令,在本例中为2to3 {}。对于找到的每个文件,{} 将替换为该文件的名称。
【讨论】:
-exec 2to3 {} + 会更高效一些;它一次在尽可能多的文件上运行2to3,而不是每个文件运行一次。
bash 4 提供了一种进行递归通配的方法。
shopt -s globstar
2to3 /home/me/scripts/**/*.py
【讨论】:
-iname 选项相同的效果,还需要使用shopt -s nocaseglob。
nocaseglob 将允许匹配 *.PY(以及 *.pY 和 *.Py)以及 *.py。