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

时间:2009-04-24 11:51:39

标签: bash

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

 rm -r *.pyc

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

22 个答案:

答案 0 :(得分:1083)

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

答案 1 :(得分:969)

find . -name '*.pyc' -delete

当然最简单。

答案 2 :(得分:82)

在当前版本的debian中,您有pycleanpython-minimal包中的脚本。

用法很简单:

pyclean .

答案 3 :(得分:77)

添加到您的~/.bashrc

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

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

用法很简单:

$ cd /path/to/directory
$ pyclean

答案 4 :(得分:51)

如果您使用的是bash> = 4.0(或zsh)

rm **/*.pyc

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

必须启用globstar shell选项。启用globstar

shopt -s globstar

并检查其状态:

shopt globstar

答案 5 :(得分:30)

我过去常常使用别名:

$ which pycclean

pycclean is aliased to `find . -name "*.pyc" | xargs -I {} rm -v "{}"'

答案 6 :(得分:17)

find . -name '*.pyc' -print0 | xargs -0 rm

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

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

您还可以添加更多参数:

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

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

答案 7 :(得分:16)

对于Windows用户:

del /S *.pyc

答案 8 :(得分:15)

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

这比

更快
$ find . -name "*.pyc" -exec rm -rf {} \;

答案 9 :(得分:9)

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

命令:

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

答案 10 :(得分:8)

只需将另一个变体添加到混音中,您也可以使用这样的反引号:

rm `find . -name *.pyc`

答案 11 :(得分:8)

Django Extension

  

注意:此答案非常具体针对已经使用Django project Django Extension

CREATE OR REPLACE FUNCTION copy_tables(_tbls regclass[])
RETURNS void AS
$func$
DECLARE
  _tbl regclass;
  _id_pairs hstore;
  _table_id_pairs hstore;
  _row record;
BEGIN
  FOR _tbl IN SELECT _tbls
  LOOP
    EXECUTE format('SELECT copy_rows_from_table(''%1$s'')', _tbl)
    INTO _table_id_pairs;
    SELECT COALESCE(_id_pairs, hstore('')) || COALESCE(_table_id_pairs, hstore('')) INTO _id_pairs;
  END LOOP;

  FOR _tbl IN SELECT _tbls
  LOOP
    FOR _row IN EXECUTE format('SELECT * FROM %1$s WHERE id = ANY(''%2$s''::uuid[])', _tbl, avals(_id_pairs))
    LOOP
      EXECUTE (
        SELECT format('UPDATE %1$s SET (%2$s) = (%3$s) WHERE id = %4$s'
                    , _tbl, string_agg(quote_ident(attname), ', '),
                    string_agg(COALESCE(_id_pairs -> ('_row.' || quote_ident(attname)), '_row.' || quote_ident(attname)), ', '), _row.id)
        FROM   pg_attribute
        WHERE  attrelid = _tbl
        AND    NOT attisdropped
        AND    attnum > 0
        AND    attname LIKE '%_id'
      );
    END LOOP;
  END LOOP;
END
$func$
LANGUAGE plpgsql;

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

答案 12 :(得分:7)

完全递归

ll **/**/*.pyc
rm **/**/*.pyc

答案 13 :(得分:3)

首先运行:

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

然后添加:

export PYTHONDONTWRITEBYTECODE=1

至〜/ .profile

答案 14 :(得分:3)

如果您不再需要.pyc,可以在终端中使用此单行:

export PYTHONDONTWRITEBYTECODE=1

如果你改变主意:

unset PYTHONDONTWRITEBYTECODE

答案 15 :(得分:2)

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

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

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

答案 16 :(得分:2)

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

答案 17 :(得分:1)

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

但请谨慎使用。首先运行find . -name "*.pyc" -type f,以查看要删除的文件。

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

答案 18 :(得分:1)

删除当前目录下所有python编译文件。

find . -name "__pycache__"|xargs rm -rf
find . -name "*.pyc"|xargs rm -rf

答案 19 :(得分:0)

如果要从项目文件夹中删除所有.pyc文件。

首先,您有

cd <path/to/the/folder>

然后找到所有.pyc文件并删除。

find . -name \*.pyc -delete

答案 20 :(得分:0)

如果要递归删除当前目录中的所有 *.pyc 文件和 __pycache__ 目录:

  • 使用蟒蛇:
import os

os.popen('find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf')
  • 或手动使用终端或 cmd:
find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf

答案 21 :(得分:0)

现在PyPI上有一个包pyclean,使用方便,跨平台。用户只需要一个简单的命令行来清理当前目录中的所有 __pycache__ 文件:

pyclean .