GST*_*tle 2 regex unix bash fabric
我正在尝试删除具有扩展名如* .pyc的空格/ files /的文件夹/ myfolder / name中的所有文件,但不要更改同一文件夹中的其他文件。
我尝试跑步:
$ rm "/myfolder/name with spaces/files/*.pyc"
Run Code Online (Sandbox Code Playgroud)
但我得到一个"No such file or directory"错误。
我也尝试运行:
$ rm "/myfolder/name with spaces/files"*.pyc
Run Code Online (Sandbox Code Playgroud)
但是,如果文件夹中没有带有* .pyc扩展名的文件,这似乎将失败(当存在* .pyc文件时,它可以工作)。
转义空格似乎也不起作用。
做到这一点的最佳方法是什么(假设我无法重命名路径)?
编辑:我找到了一个解决方案,并且我有一个后续问题:
我刚刚发现,运行以下命令是可行的,并且从类似的帖子中得到了一些启示:
$ find "myfolder/name with spaces/files/" -name *.pyc -exec rm '{}' ';'
Run Code Online (Sandbox Code Playgroud)
有没有办法单独使用上述方法rm?以上命令是执行此操作的最佳方法吗?我的理解是,通常-exec应谨慎使用。
编辑2:更好的解决方案!
一些更好的上下文:我正在尝试使用Fabric远程运行这些命令。
我没有意识到有一个cd上下文管理器,但是使用它我找到了一个解决方案:
from fabric.api import cd
with cd('/myfolder/name with spaces/files/'):
sudo('rm -f *.pyc')
Run Code Online (Sandbox Code Playgroud)
我还发现了一个单独的问题:rm *.pyc由于目录中没有* .pyc文件,因此使用rm -f *.pycFabric导致失败,因此使用allow命令可以使静默失败并允许Fabric继续。
找到了一个解决方案,在上述问题的答案中将其编辑为“ EDIT 2”
我没有意识到cdFabric中有一个上下文管理器,因此我找到了一个解决方案:
from fabric.api import cd
with cd('/myfolder/name with spaces/files/'):
sudo('rm -f *.pyc')
Run Code Online (Sandbox Code Playgroud)
我还发现了一个单独的问题:rm *.pyc由于目录中没有* .pyc文件,因此使用rm -f *.pycFabric导致失败,因此使用allow命令可以使静默失败并允许Fabric继续。