如何在unix脚本中提取文件名的一部分并检查它是不是存在[重复]
Posted
技术标签:
【中文标题】如何在unix脚本中提取文件名的一部分并检查它是不是存在[重复]【英文标题】:how to extract a part of file name in unix scripting and check if it exists [duplicate]如何在unix脚本中提取文件名的一部分并检查它是否存在[重复] 【发布时间】:2021-10-17 17:34:27 【问题描述】:我需要编写一个脚本,我必须从文件abc_def_xxx_yyy_20210515.txt
中提取部分名称并检查abc_def_xxx_yyy.txt
是否存在。如果没有,则创建文件。
FILE="abc_def_xxx_yyy_20210515.txt"
DLS=echo $FILE | awk -F_ 'print $1,$2,$3,$4".txt"'
DLL=\home\xxx\$DLS
if [-f "$DLL"]; then
echo "$DLL exists"
else
touch "$DLL"
fi
我收到错误消息"abc_def_xxx_yyy_20210515.txt" not found
但如果我只是运行
FILE="abc_def_xxx_yyy_20210515.txt"
echo $FILE | awk -F_ 'print $1,$2,$3,$4".txt"'
我收到abc_def_xxx_yyy.txt
。
有人可以帮我解决这个问题吗?
【问题讨论】:
你使用bash
还是ksh
?
这里有一堆语法错误;通过shellcheck.net 运行它并修复它指出的内容。此外,看起来您使用的是 DOS/Windows 路径(使用 /
而不是 ``)——这是在 Windows 还是 Unix/Linux 上?
在 UNIX 路径上
我正在使用 ksh
您忘记了命令替换周围的$(...)
。您将字符串echo
分配给变量DLS
,然后尝试将$FILE
作为命令执行。
【参考方案1】:
试试:
FILE="abc_def_xxx_yyy_20210515.txt"
DLS="$FILE%_*.txt"
DLL="$HOME/$DLS"
if [ -f "$DLL"]; then
echo "$DLL exists"
else
touch "$DLL"
fi
【讨论】:
以上是关于如何在unix脚本中提取文件名的一部分并检查它是不是存在[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用单个命令在 UNIX 文件系统中提取 JAR 并使用 JAR 命令指定其目标目录?
需要有关 unix 脚本的帮助以从特定位置读取数据并使用在查询中提取的数据
检查环境变量是不是在 Unix shell 脚本中设置的简洁方法是啥?