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

标签 linux bash unix filenames

我得到了一个程序的一堆文件如下:

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

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

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

然而,它并没有起作用。

最佳答案

使用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 自己可以很好地完成的事情是没有用的。

关于linux - 如何从顺序输入文件中导出输出文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28570508/

相关文章:

c - 为什么我的 Makefile 构建了一个不存在的源文件?

c - wait() SIGCHLD 和退出状态

unix - 差异文件存在于两个不同的目录中

bash - 在 Bash 脚本中给定数组变量名称的数组,循环遍历数组元素

bash - 如何在 Bash 脚本中创建新的用户名和密码?

linux - 哪个 cygwin 包获取 `parallel` 命令?

javascript - 如何在搜索 js 文件树时缩小 'skip' JavaScript 文件?

linux - Ubuntu 12.04 上的 Aptana 3 无法启动

linux - 可以有比端口号更多的 TCP 套接字吗?

c - 为什么我们要将 0x0 复制到 Stack pointer Register?