Shell 检查文件的脚本';存在于多个目录中,如果不存在,则创建(使用644个perms),否则仅创建chmods到644
我试图编写一个脚本来检查文件是否存在,如果它不存在,它将以644权限创建它。如果该文件已经存在,则只需确保权限为644。下面的脚本用于当前目录的文件 重点是我可能有10个目录,我需要检查和执行相同的事情 范例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
/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