说我的目录中有三个文件 dir
touch a.ym b.ym a.job
*.ym
如果没有相应的*.job
文件,我需要全部打印。所以我尝试了
for file in $(find ${dir} -name \*.ym);do
filebase=$(basename $file)
sample_id=$(echo "${filebase}"| awk -F'[.]' '{print $1}')
if [[ $sample_id != *".job" ]]; then
echo "${file}"
fi
done
但是,上述解决方案是同时打印
a.ym b.ym
文件,我只b.ym
需要打印出文件
在Bash中:
为确保使用bash
解释程序运行可执行脚本,确保脚本中的第一个字符是#!
,后面是将调用的命令,这一点很重要bash
。第一行的示例是:
#!/bin/bash
通常,不匹配任何内容的glob模式的扩展将导致原始glob模式。在我们的情况下,这是不希望的。为了使不匹配的glob评估为空文件列表,需要nullglob
启用以下选项:
shopt -s nullglob
下面的表达式求文件的名称在两端的名单.ym
,在目录内$dir
:
"$dir"/*.ym
以下内容计算为文件的文件名前缀$file
:
"${file%.*}"
检查文件是否不存在的条件是:
if [[ ! -f "${file}" ]]; then
... the file does not exist ...
fi
结合这些点,将产生以下脚本:
#!/bin/bash
shopt -s nullglob
for file in "$dir"/*.ym; do
if [[ ! -f "${file%.*}.job" ]]; then
echo "$file"
fi
done
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句