在shell脚本中提取没有扩展名的文件名

The*_*Cat 2 programming

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

我有一个公制的 .txt 文件,我想加载到数据库中。

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

所以我想执行命令

for f in *.txt; do mysql -u root -p -e "LOAD DATA LOCAL INFILE '$f' INTO TABLE $f" -D rn4; done
Run Code Online (Sandbox Code Playgroud)

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

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

mysql -u root -p -e "LOAD DATA LOCAL INFILE 'piRNA.txt' INTO TABLE piRNA" -D rn4
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?

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

max*_*zig 9

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

f=piRNA.txt
g=${f%.txt}
Run Code Online (Sandbox Code Playgroud)

执行

 echo $f $g
Run Code Online (Sandbox Code Playgroud)

产生以下输出:

piRNA.txt piRNA
Run Code Online (Sandbox Code Playgroud)

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

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


归档时间:

查看次数:

13419 次

最近记录:

9 年,11 月 前