在 shell 脚本中提取不带扩展名的文件名

在 shell 脚本中提取不带扩展名的文件名

可能的重复:
从字符串中删除文件扩展名的最佳方法?
如何通过删除扩展名来重命名多个文件?

我有大量 .txt 文件,我想加载到数据库中。

这些表与 .txt 文件具有相同的名称,但没有扩展名。

所以我想执行命令

for f in *.txt; do mysql -u root -p -e "LOAD DATA LOCAL INFILE '$f' INTO TABLE $f" -D rn4; done

然而,最后一个$f让我头疼,因为我希望它只使用名称,而不使用扩展名。

所以对于文件来说piRNA.txt命令看起来像

mysql -u root -p -e "LOAD DATA LOCAL INFILE 'piRNA.txt' INTO TABLE piRNA" -D rn4

我该怎么做呢?

为了使答案对其他人有用,请不要只给我命令,而请写一两行关于如何在一般情况下提取名称的信息。

答案1

您可以在 shell 脚本中这样做:

f=piRNA.txt
g=${f%.txt}

执行中

 echo $f $g

产生以下输出:

piRNA.txt piRNA

使用该%语法,您可以删除匹配的后缀模式。示例中的后缀模式是.txt并且f是从中删除的变量。请注意,模式也可能包含通配符(参见例如bash手册了解详情)。

与往常一样,如果您的文件名可能包含空格,您必须将变量的引用放入双引号中(例如"$f"等)。

答案2

尝试这个:

for f in *.txt; do echo ${f%.*};done
  • 使用模式匹配 *.txt匹配所有以以下结尾的文件.txt
  • ${f%.*}shell 语法是参数扩展,删除 中最小的后缀匹配模式$f。这里我们去掉扩展部分.txt

相关内容