对于在.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}
)。
感谢您的帮助。
答案 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