我的目录中包含很多.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扩展名。
我该怎么办?
答案 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
匹配的任何前缀。
答案 1 :(得分:-1)
ls -A "$directory" | grep -E '.*\.cif'
应该这样做