警告 linux cmd:查找。 -删除-名称“*.swp”

Waring on linux cmd: find . -delete -name "*.swp"

我尝试删除 vim 使用以下命令创建的所有 .swp 文件: find . -delete -name "*.swp"

然后我的整个项目都被删除了... 谁能告诉我为什么?以及如何恢复项目?

如果您将命令更改为: find . -name "*.swp" -delete 它只会删除它匹配的文件

find . -delete -name "*.swp"等于rm -rf * 此问题是给程序员的警告信息。

find 谓词和动作形成一个布尔表达式,通过短路从左到右求值。

你的表情:

find . -delete -name "*.swp"

等同于 bash 表达式:

rm "$file" && [[ $file == *.swp ]]

这将删除文件,如果删除成功,它会检查名称。

比较一下:

# Like: find . -name "*.swp" -delete 
[[ $file == *.swp ]] && rm "$file"

在这种情况下,它会检查名称。如果检查通过,它会删除该文件。这就是你想要的。

此行为非常有用,因为它允许您编写更高级的控制流和分支:

find . -name '.git' -prune \
       -o \( -name '*.xz' -exec xz -d {} \; \
          -o -name '*.gz' -exec gzip -d {} \; \) \
            -printf 'Successfully extracted %f\n'

此表达式将跳过任何 .git 目录,运行 xz -d 仅在 .xz 文件上,gzip -d 仅在 .gz 文件上,最后打印一条消息提取的文件。

至于你的文件,它们被删除了。通常不可能让他们回来。您必须从备份中恢复它们,或者,如果您走投无路,请尝试遵循 OS 和文件系统的文件恢复指南(但同样,这通常是不可能的)。