Python Fabric - 删除目录中带有 / 空格的模式匹配的文件?

Python Fabric - Remove files matching a pattern in a directory w/ spaces?

我正在尝试删除 /myfolder/name 文件夹中 spaces/files/ 扩展名为 *.pyc 的所有文件,但保留同一文件夹中的其他文件不变。

我试过了 运行宁:

$ rm  "/myfolder/name with spaces/files/*.pyc"

但我收到 "No such file or directory" 错误。

我也试过运行宁:

$ rm "/myfolder/name with spaces/files"*.pyc

但是如果文件夹中没有扩展名为 *.pyc 的文件,这似乎会失败(当存在 *.pyc 文件时它会起作用)。

转义空格似乎也不起作用。

执行此操作的最佳方法是什么(假设我无法重命名路径)?


编辑:我找到了一个解决方案,我有一个后续问题:

我刚刚发现 运行 以下命令有效,灵感来自 this similar post:

$ find "myfolder/name with spaces/files/" -name *.pyc -exec rm '{}' ';'

有没有办法仅用 rm 就可以完成与上述相同的操作?上面的命令是执行此操作的最佳方法吗?我的理解是一般-exec要慎用


编辑 2:更好的解决方案!

一些更好的上下文:我正在尝试使用 Fabric 远程 运行 这些命令。

我没有意识到有一个 cd 上下文管理器,但是使用它我找到了一个解决方案:

from fabric.api import cd
with cd('/myfolder/name with spaces/files/'):
    sudo('rm -f *.pyc')

我还发现了一个单独的问题:使用 rm *.pyc 导致 Fabric 失败,因为目录中没有 *.pyc 文件,所以使用 rm -f *.pyc 允许命令静默失败并允许 Fabric继续。

要仅使用 rm 而不是 find(这是一种非常好的方法),您只需转义目录名称中的空格即可:

rm /myfolder/name\ with\ spaces/files/*.pyc

找到解决方案,在上述问题的答案中编辑为'EDIT 2'

我没有意识到 Fabric 中有一个 cd 上下文管理器,所以使用它我找到了一个解决方案:

from fabric.api import cd
with cd('/myfolder/name with spaces/files/'):
    sudo('rm -f *.pyc')

我还发现了一个单独的问题:使用 rm *.pyc 导致 Fabric 失败,因为目录中没有 *.pyc 文件,所以使用 rm -f *.pyc 允许命令静默失败并允许 Fabric继续。