【问题标题】:Waring on linux cmd: find . -delete -name "*.swp"linux 命令警告: find . -删除-名称“*.swp”
【发布时间】:2018-10-24 09:28:25
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: find rm file-recovery


    【解决方案1】:

    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 文件运行 xz -d,仅对 .gz 文件运行 gzip -d,最后为提取的文件打印一条消息。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-05
      • 2021-07-19
      • 2021-06-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多