即使用引号,这个’查找和删除’命令也能用星号工作吗?

我想运行类似于此的命令,其中将删除超过7天的AVI文件:

找到“/ home / user / videos文件夹/ * .avi”-mtime +7 -exec rm -f

但正如您所看到的,video文件夹有一个空格,所以我不得不将该路径放在引号中。 但是,星号是否仍然可以找到所有AVI文件,或者Linux现在会认为星号是实际的文件名吗?

让我们假设我不想通过重命名文件夹来删除路径中的空间。

您需要重新格式化命令才能使其正常工作。

试试这个:

find "/home/user/videos folder" -name "*.avi" -mtime +7 -exec rm -f {} \; 

或者,在GNU find中,在没有-exec的情况下实现相同的function:

 find "/home/user/videos folder" -name "*.avi" -mtime +7 -delete 

要查找的第一个参数是要查看的文件夹 – 您不应该尝试将整个filter放在这里,只是起点。 然后使用-name告诉它要查找的模式。 您可以在没有-exec-delete情况下尝试此操作,直到您-delete为止,然后尝试它就不会造成任何损害。

在引号中包含一个参数基本上可以阻止shell搞乱它。 如果你使用-name *.avi ,那么find所见的参数可以是任何东西,因为shell会在调用find之前解析它(并用当前目录的以.avi结尾的内容替换它)。 这通常很糟糕,会导致意想不到的结果。 find知道如何解析*本身。