【问题标题】:bash equivalent for os.walk?bash 等效于 os.walk?
【发布时间】:2016-02-05 18:35:23
【问题描述】:

我正在使用 2to3 来修复我的脚本库,它似乎是命令行的东西,而不是 shell 的东西。

我想从 /home/me/scripts 向下执行所有文件,假设它们以 .py 结尾。有没有一种简单的方法可以为 shell 中我的文件夹下的每个文件执行 2to3 -y 文件名?

【问题讨论】:

    标签: python linux bash python-2to3


    【解决方案1】:

    find 命令:

     find /home/me/scripts  -iname "*.py" -exec 2to3 {} \;
    

    -exec 参数告诉它执行该参数之后的命令,在本例中为2to3 {}。对于找到的每个文件,{} 将替换为该文件的名称。

    【讨论】:

    • -exec 2to3 {} + 会更高效一些;它一次在尽可能多的文件上运行2to3,而不是每个文件运行一次。
    【解决方案2】:

    bash 4 提供了一种进行递归通配的方法。

    shopt -s globstar
    2to3 /home/me/scripts/**/*.py
    

    【讨论】:

    • 这是一个很好的答案,但要获得与接受答案中的-iname 选项相同的效果,还需要使用shopt -s nocaseglob
    • 仅基于问题,我认为没有必要忽略大小写。但是是的,nocaseglob 将允许匹配 *.PY(以及 *.pY*.Py)以及 *.py
    • 我没有测试你的,我接受了他的回答,因为它有效并且我已经将文件迁移到了 py3
    猜你喜欢
    • 1970-01-01
    • 2012-09-01
    • 2012-08-23
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 2016-10-19
    • 2013-07-14
    • 1970-01-01
    相关资源
    最近更新 更多