首页 > 解决方案 > linux cmd 上的警告:查找 . -删除-名称“*.swp”

问题描述

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

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

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

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

标签: findrmfile-recovery

解决方案


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 文件上运行,最后为提取的文件打印一条消息。

至于您的文件,它们已被删除。通常不可能让他们回来。您必须从备份中恢复它们,或者,如果您不顾一切,请尝试遵循适用于您的操作系统和文件系统的文件取消删除指南(但同样,这通常是不可能的)。


推荐阅读