我有一个目录,里面有很多.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扩展名。
我该怎么办?
发布于 2019-03-21 22:35:21
我通常不提倡在脚本中使用cd,但在这里,这是去掉目录名的最简单方法。
( cd /MOFS; printf '%s\n' *.cif ) >names_mofs括号创建了一个子外壳,因此cd不会影响括号之外的脚本的其余部分。
如果出于某种原因,您希望保留循环并避免cd,则basename命令将按您的要求执行。但是,shell可以用parameter expansion做几乎相同的事情。
for file in "$directory"/*.cif; do
#basename "$file" # notice proper quoting
echo "${file##*/}"
done >names_mofs简而言之,${variable##pattern}生成variable的值,去掉任何与pattern匹配的前缀。
发布于 2019-03-21 22:30:40
ls -A "$directory" | grep -E '.*\.cif'这样就可以了。
https://stackoverflow.com/questions/55282744
复制相似问题