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继续。
我正在尝试删除 /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继续。