首页 文章

如何从项目中删除所有.pyc文件?

提问于
浏览
600

我在一个相当大的项目中重命名了一些文件,并希望删除他们留下的.pyc文件 . 我尝试了bash脚本:

rm -r *.pyc

但是这并没有像我想象的那样通过文件夹递归 . 我究竟做错了什么?

18 回答

  • 30

    如果你不再需要.pyc,你可以在终端中使用这一行:

    export PYTHONDONTWRITEBYTECODE=1
    

    如果你改变主意:

    unset PYTHONDONTWRITEBYTECODE
    
  • 1

    你可以运行 find . -name "*.pyc" -type f -delete .

    但要谨慎使用它 . 首先运行 find . -name "*.pyc" -type f 以确切地查看要删除的文件 .

    此外,请确保-delete是命令中的最后一个参数 . 如果你把它放在-name * .pyc参数之前,它将删除所有内容 .

  • 3
    find . -name "*.pyc" -exec rm -f {} \;
    
  • 7

    find . -name '*.pyc' -delete

    当然最简单 .

  • 6

    在当前版本的debian中,您有 pyclean 脚本,该脚本位于 python-minimal 包中 .

    用法很简单:

    pyclean .
    
  • 1021

    添加到 ~/.bashrc

    pyclean () {
            find . -type f -name "*.py[co]" -delete
            find . -type d -name "__pycache__" -delete
    }
    

    这将删除所有.pyc和.pyo文件以及 __pycache__ 目录 . 它也非常快 .

    用法很简单:

    $ cd /path/to/directory
    $ pyclean
    
  • 12

    如果你正在使用bash> = 4.0(或zsh)

    rm **/*.pyc
    

    请注意 */*.pyc 选择直接的第一级子目录中的所有 .pyc 文件,而 **/*.pyc 递归扫描整个目录树 . 例如, foo/bar/qux.pyc 将删除 foo/bar/qux.pyc ,但 */*.pyc 不会删除 foo/bar/qux.pyc .

    必须启用globstar shell选项 . 要启用 globstar

    shopt -s globstar
    

    并检查其状态:

    shopt globstar
    
  • 15

    我过去常常使用别名:

    $ which pycclean
    
    pycclean is aliased to `find . -name "*.pyc" | xargs -I {} rm -v "{}"'
    
  • 8
    find . -name '*.pyc' -print0 | xargs -0 rm
    

    查找以递归方式查找* .pyc文件 . xargs获取名称列表并将其发送到rm . -print0和-0告诉两个命令用空字符分隔文件名 . 这允许它在包含空格的文件名上正常工作,甚至包含新行的文件名 .

    使用-exec的解决方案可以正常工作,但它会为每个文件创建一个rm的新副本 . 在慢速系统或大量文件上,这将花费太长时间 .

    你还可以添加几个args:

    find . -iname '*.pyc' -print0 | xargs -0 --no-run-if-empty  rm
    

    iname添加不区分大小写,如* .PYC . 如果没有这样的文件,no-run-if-empty可以防止你从rm获得错误 .

  • 71
    $ find . -name '*.pyc' -delete
    

    这比快

    $ find . -name "*.pyc" -exec rm -rf {} \;
    
  • 2

    对于Windows用户:

    del /S *.pyc
    
  • 2

    只是为了在混合中添加另一个变体,你也可以使用这样的反引号:

    rm `find . -name *.pyc`
    
  • 931

    Django扩展

    注意:这个答案非常特定于已经使用Django Extension的Django项目 .

    python manage.py clean_pyc
    

    可以在its source code中查看实施情况 .

  • 1

    完全递归

    ll **/**/*.pyc
    rm **/**/*.pyc
    
  • 8

    此外,人们通常希望在当前目录中递归删除所有 *.pyc*.pyo 文件和 __pycache__ 目录 .

    命令:

    find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf
    
  • 80

    第一次运行:

    find . -type f -name "*.py[c|o]" -exec rm -f {} +
    

    然后加:

    export PYTHONDONTWRITEBYTECODE=1
    

    至〜/ .profile

  • 49

    rm -r 递归到目录,但仅递归到 rm 的目录 . 它还将删除这些目录 . 一个解决方案是:

    for i in $( find . -name *.pyc )
    do
      rm $i
    done
    

    find 将在当前目录中递归查找所有* .pyc文件, for 循环将遍历找到的文件列表,删除每个文件 .

  • 16
    find . -name "*.pyc"|xargs rm -rf
    

相关问题