我需要遍历匹配查询的所有文件并显示文件名。
目前我只能让它适用于所有文件
for filename in ~/notes/*
do
NAME=`basename "$filename"`
echo ${NAME%.*}
done;
删除完整路径和文件扩展名,回显文件名。
我需要相同的东西,但对于在文件名中包含查询的文件。我试过这个并没有回复任何东西
for filename in ~/notes/\*$*\*
do
TEST=`basename "$filename"`
echo ${TEST%.*}
done;
如果我echo
$filename
确实返回完整路径,但这不是我需要的。
此外,第二个片段不会在新行中返回每个文件
我有一个文本文件列表,例如:
我想输入myfunc name file
并获取第二和第三个文件。
我尝试了以下功能,但它只按顺序搜索。
myfunc(){
for filename in ~/notes/\*$*\*
do
TEST=`basename "$filename"`
echo ${TEST%.*}
done;
}
如果我运行myfunc file-name
但不运行myfunc file name
答案 0 :(得分:1)
我已经嵌套了 if 循环,该循环在 for 循环中使用了正则表达式。
我保留了原始文件名,包括扩展名为“文件”变量,以防您希望按扩展程序进行过滤。
只需编辑正则表达式变量即可捕获不同类型的内容。
更新:已编辑,可以从命令行中获取两个参数,并且必须匹配两者才能打印文件名
#!/usr/bin/bash
regex=$1
regex2=$2
for filename in ~/notes/*; do
file=`basename "$filename"`
filestrip=${file%.*}
if [[ $filestrip =~ $regex ]] && [[ $filestrip =~ $regex2 ]]; then
echo $filestrip
fi
done