在linux文件系统中查找所有python文件

unc*_*der 5 python command-line find

如何在整个 Linux 文件系统中搜索所有 python 文件(扩展名为 的文件.py)?我知道我可以做,find -name filename但我该如何为文件类型做呢?

wal*_*tor 7

-name '*.py'因为-name接受一个模式。

注意单引号。


Jed*_*edi 6

sudo find / -name "*.py"

您只需要sudo避免Permission denieds (因为您是从根搜索)。

  • 在这种情况下,您需要小心使用“裸”glob:如果当前目录中恰好有一个或多个文件与“*.py”匹配,shell 将扩展该 glob 并将 *that* 的结果传递给“查找”命令。底线:引用或转义任何此类模式,即使用“*.py”或“*.py”或“\*.py” (2认同)

Wil*_*ilf 6

并非所有 python 文件都有文件扩展名-例如尝试.py运行)。grep -rni python /usr/bin大多数这些脚本都会有一个“shebang”(或 hashbang)行(例如#!/usr/bin/env python, #!/usr/bin/python2.7)。这会通知脚本的解释器需要使用哪个程序来运行它,您可以搜索它来查找 python 文件

\n\n

但是,您也可以使用文件的 mimetype(通常沿着 的行text/x-python)来查找它:

\n\n
find / -type f | while read in ; do if file -i "${in}" | grep -q x-python ; then echo "${in}" ; fi ; done\n
Run Code Online (Sandbox Code Playgroud)\n\n

/您想要的搜索目录在哪里。

\n\n

您还find可以添加-executable仅查找可执行文件的选项。另外,使用-type f限制查找仅查找文件 - 您可以更改它,然后也显示符号链接等(某些脚本包含在/usr/lib等中并符号链接到/usr/bin/等)。还有更多选项可用,您可以通过运行来查看这些选项man find

\n\n

file即使文件没有扩展名等(使用 shebang 行等),也应该能够猜测文件类型 - 请参阅此处

\n\n

要删除任何find: \xe2\x80\x98/.../FILE\xe2\x80\x99: Permission deniedetc 错误,您可以以 root 身份运行脚本(使用sudo bash -c "COMMAND",使用 etc 打开 shell sudo su),和/或简单地附加2>/dev/null到 find 命令。

\n

  • 是的 !正是如此!Linux/Unix 不关心扩展,这正是我处理这个问题的方式。我还认为“find”+“-exec”标志将是更好的选择,只需将输出通过管道传输到“grep”或“awk”。这将使生产线只剩下两条管道。 (3认同)
  • 如果你真的要“找到|” while read`,然后执行`find ... -print0 | 而 IFS= 读取 -d '' -r in`。请参阅http://mywiki.wooledge.org/ParsingLs#line-108 (2认同)