繁体   English   中英

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

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

我正在尝试删除具有扩展名如* .pyc的空格/ files /的文件夹/ myfolder / name中的所有文件,但不要更改该文件夹中的其他文件。

我尝试跑步:

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

但出现"No such file or directory"错误。

我也尝试运行:

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

但是,如果文件夹中没有带有* .pyc扩展名的文件,这似乎将失败(当存在* .pyc文件时,它可以工作)。

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

做到这一点的最佳方法是什么(假设我无法重命名路径)?


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

我刚刚发现,运行以下命令是可行的,并且从类似的帖子中得到了一些启示:

$ 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继续。

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

要使用rm而不是find来做到这一点(这是一种非常好的方法),您可以转义目录名称中的空格:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM