Shell 检查文件的脚本';存在于多个目录中,如果不存在,则创建(使用644个perms),否则仅创建chmods到644

Shell 检查文件的脚本';存在于多个目录中,如果不存在,则创建(使用644个perms),否则仅创建chmods到644,shell,Shell,我试图编写一个脚本来检查文件是否存在,如果它不存在,它将以644权限创建它。如果该文件已经存在,则只需确保权限为644。下面的脚本用于当前目录的文件 重点是我可能有10个目录,我需要检查和执行相同的事情 范例 /usr/local/opt/**app1**/logs/test`date '+%Y%m%d'`.log app1可以是5到10个不同的应用程序。名称是唯一的(不是app1、app2等)。文件目录结构的其余部分是统一/标准的 我可以在现在的dir上用这样的方法来解决它: if [ -f

我试图编写一个脚本来检查文件是否存在,如果它不存在,它将以644权限创建它。如果该文件已经存在,则只需确保权限为644。下面的脚本用于当前目录的文件

重点是我可能有10个目录,我需要检查和执行相同的事情

范例

/usr/local/opt/**app1**/logs/test`date '+%Y%m%d'`.log
app1可以是5到10个不同的应用程序。名称是唯一的(不是app1、app2等)。文件目录结构的其余部分是统一/标准的

我可以在现在的dir上用这样的方法来解决它:

if [ -f test`date '+%Y%m%d'`.log ];
then
    chmod 644 test`date '+%Y%m%d'`.log
    echo "File test`date '+%Y%m%d'`.log  exists and now it is readable by all"
else
    echo "File test`date '+%Y%m%d'`.log  does not exists creating"
    touch test`date '+%Y%m%d'`.log
    chmod 644 test`date '+%Y%m%d'`.log
fi
但是,当存在multiple dir元素时,我被难住了。 放置显式目录结构不是一个好主意,因为有时有许多“应用程序”,有时有不同数量的应用程序。 如果文件存在,我只希望chmod不接触,因为它已经有数据,不应该删除

非常感谢任何意见

谢谢

尼克


请注意,触摸已存在的文件不会删除其数据。触摸已经存在的文件是非常安全的。它只是更新了他们的修改时间,仅此而已。

我不想把所有代码都写出来,但我会使用
find/usr/local/opt-type d
然后将其导入
grep”/logs/“
然后在结果目录中循环查找您的测试日志文件。

不要触摸,因为其中已经有不应删除的数据:是什么让您认为触摸会删除任何数据?如果文件已经存在,它只更新一个日期/时间戳。谢谢你纠正我的错误。这似乎奏效了。非常感谢你,先生。其中表示app{1..10}I替换为*因为命名约定不是标准/通用的。仍然在测试。好的,我注意到在应用程序目录和日志目录之间有一个版本。同样,每个应用程序的版本都不同。因此,实际上有两个通配符。我需要创建第二个参数吗?目录结构为/usr/local/opt/**appl*/**version**/logs(其中应用程序和版本不是标准的)
for app in /usr/local/opt/*/*; do
    log_file=$app/logs/test$(date +%Y%m%d).log

    touch "$log_file"
    chmod 644 "$log_file"
done