【问题标题】:Removing files using if statement in bash script when a certain condition is met满足特定条件时使用 bash 脚本中的 if 语句删除文件
【发布时间】:2020-04-04 19:12:01
【问题描述】:

我目前正在使用以下代码:

#!/bin/bash

rm /media/external/archive/auth-settings.tar.raw
rm /media/external/archive/bak-settings.tar.raw
rm /media/external/archive/cont-settings.tar.raw
rm /media/external/archive/data-data.tar.raw
rm /media/external/archive/data-settings.tar.raw
rm /media/external/archive/mon-data.tar.raw
rm /media/external/archive/mon-settings.tar.raw
rm /media/external/archive/mail-data.tar.raw
rm /media/external/archive/mail-settings.tar.raw
rm /media/external/archive/portal-settings.tar.raw
rm /media/external/archive/webserver-data.tar.raw
rm /media/external/archive/webserver-settings.tar.raw

for f in /media/external/archive/*.tar.raw;
        do mv "$f" "${f%.*.tar.raw}.tar.raw";
done

在新备份存档后删除旧备份。但是,如果由于某种原因存档失败,则不管怎样,此脚本都会运行,并且会删除所有存档,不留下任何内容。

我如何修改脚本以使rm 命令仅在对应的存档存在且其文件名中有计数的情况下才执行,如果编号的存档不存在则跳过删除。例如:

auth-setting.tar.raw

只有在有

时才应删除

auth-settings.number.tar.raw

【问题讨论】:

  • 您可以在 if 语句中使用正则表达式。在您的情况下,正则表达式类似于 "[0-9].*" 请参阅:stackoverflow.com/questions/2348379/… 您还应该为文件名使用数组,从而为您节省复制过去的工作(这会随着 rm 周围的 if 条件而增加)

标签: regex bash if-statement


【解决方案1】:

您可以在脚本中使用 if 语句。例如:

if [ -e auth-settings.*.tar.raw ]
then
    rm /media/external/archive/auth-settings.tar.raw
fi

"*" 字符为您提供了一个通配符,可以在两个点之间插入。

只有当"auth-settings.number.tar.raw" 存在时,您才会删除/media/external/archive/auth-settings.tar.raw

【讨论】:

  • 如果有多个匹配文件,这将不起作用。见this question
【解决方案2】:

这将返回一个文件列表,其中包含您提供的格式的数字,但它会删除数字,因此您只能删除此输出:

find /media/external/archive/ -type f -regextype sed -regex ".*\.[0-9]\+\.tar\.raw" -print0 | xargs --null -L 1 basename | sed -E "s/(.*)(\.[0-9]+)(.*)/\1\3/g" 

目录中的文件:

 more-files.03242.tar.raw   
 somethingwithdot.3.tar.raw
 'with spaces.09434.tar.raw'

输出:

somethingwithdot.tar.raw
more-files.tar.raw
with spaces.tar.raw

现在您可以安全地迭代和删除这些文件,因为您可以确定它们有备份。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多