Python Fabric - 使用/ spaces删除与目录中的模式匹配的文件?

时间:2015-02-23 23:16:05

标签: regex bash unix fabric

我试图删除文件夹/ myfolder / name中的所有文件,其中space / 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继续

2 个答案:

答案 0 :(得分:4)

找到一个解决方案,在上面问题的答案中编辑为“编辑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继续

答案 1 :(得分:0)

要使用rm而不是find(这是一种非常好的方式),你可以转义目录名中的空格:

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