回声特定字符范围来自Unix中目录中的多个文件名

时间:2015-09-27 19:01:33

标签: bash unix echo

对于在.bam内以/a/given/path/结尾的给定文件集,我想回显一个长度可变的特定字符串。我尝试了以下尝试失败:

for dir in /a/given/path/*.bam; do echo ${dir##path/%%.bam}; done

目的是在没有.bam扩展名的情况下回显bam文件名(从path/开始),但它只是回显整个路径。如果我改为:

for dir in /a/given/path/*.bam; do echo ${dir%%.bam}; done

它会回显

/a/given/path/filename1
/a/given/path/filename22

理想情况下,即使对于各种长度的文件名,我也只能回显文件名(例如,这阻止我使用echo ${dir:15:9})。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

我可以想到两种方法:

for dir in /a/given/path/*.bam; do dir="${dir##*/}"; echo "${dir%.bam}"; done

(两步替换)或

( cd /a/given/path && for dir in *.bam; do echo "${dir%.bam}"; done )

答案 1 :(得分:0)

Unix有命令“dirname”和“basename”,它们可以组合起来做你想要的(我认为)。

AttributeError: 'list' object has no attribute 'astype'

所有双引号都是为了处理路径和文件名中的可能空格。

答案 2 :(得分:0)

使用basename获取文件名,然后cut放弃.bam

for dir in /a/given/path/*.bam; do basename $dir | cut -f 1 -d .; done