如何从顺序输入文件中导出输出文件名?

时间:2015-02-17 20:27:07

标签: linux bash unix filenames

我已经为程序获得了一堆文件,如下所示:

/work/xiaofenglu/science/myten.*.dump.gz

现在,我需要提取字符串myten.*作为顺序输出文件的基本名称。 我使用以下命令来处理此问题:

for inputfile in *.dump.gz
do
   base_name='basename ${inputfile} .dump.gz'
done

然而,它没有用。

1 个答案:

答案 0 :(得分:1)

使用parameter expansions

#!/bin/bash

shopt -s nullglob

for f in /work/xiaofenglu/science/myten.*.dump.gz; do
    base_name=${f%.dump.gz} # removes trailing .dump.gz
    base_name=${base_name##*/} # removes everything up to last / found
    printf 'Base name is: %s\n' "$base_name"
done

由于您甚至没有调用命令basename,因此命令不起作用。您只是将字符串base_name定义为逐字字符串

basename ${inputfile} .dump.gz

因为单引号。也许你看到了这个命令:

base_name=`basename ${inputfile} .dump.gz`

并且您将反引号与单引号'混淆了。使用反引号而不是单引号,该命令有效。但是使用$(...)构造而不是反引号更好:

base_name=$(basename "$inputfile" .dump.gz)

称为Command Substitution

但我会说,调用外部进程basename执行Bash可以自行完成的任务是没用的。