如何在目录中打印以.cif结尾的文件名?

时间:2019-03-21 14:29:22

标签: bash shell scripting

我的目录中包含很多.cif文件。我想通读文件名,并将以.cif结尾的文件打印到文件中。

这是我尝试过的:

#!/bin/bash

directory=/MOFS

:>| names_mofs

myfilenames="${directory}/*.cif"
for file in $myfilenames
do
   echo $file >> names_mofs

done

但是此代码将/MOFS/*.cif打印到names_mofs文件中。我还需要打印全名,包括.cif扩展名。

我该怎么办?

2 个答案:

答案 0 :(得分:1)

我通常不提倡在脚本中使用cd,但是在这里,这是摆脱目录名称的最简单方法。

( cd /MOFS; printf '%s\n' *.cif ) >names_mofs

括号会创建一个子外壳,因此cd不会影响括号之外的脚本的其余部分。

如果出于某种原因想要保持循环并避免使用cd,则basename命令会执行您所要求的操作。但是,外壳程序可以使用parameter expansion做几乎相同的事情。

for file in "$directory"/*.cif; do
    #basename "$file"  # notice proper quoting
    echo "${file##*/}"
done >names_mofs

简而言之,${variable##pattern}产生variable的值,并删除与pattern匹配的任何前缀。

另请参见When to wrap quotes around a shell variable?

答案 1 :(得分:-1)

ls -A "$directory" | grep -E '.*\.cif'

应该这样做