我尝试删除.swp
vim 使用以下命令创建的所有文件:
find . -delete -name "*.swp"
.
然后我的整个项目被删除了......谁能告诉我为什么?以及如何恢复项目?
如果您将命令更改为此:
find . -name "*.swp" -delete
它只会删除它匹配的文件
find . -delete -name "*.swp"
等于rm -rf *
这个问题是给程序员的警告信息。
我尝试删除.swp
vim 使用以下命令创建的所有文件:
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 文件上运行,最后为提取的文件打印一条消息。
至于您的文件,它们已被删除。通常不可能让他们回来。您必须从备份中恢复它们,或者,如果您不顾一切,请尝试遵循适用于您的操作系统和文件系统的文件取消删除指南(但同样,这通常是不可能的)。