对不起,这似乎是一个非常直截了当的问题,但我无法在任何地方找到好的语法......
我在一个包含一些文件的目录中:a.fa
和b.fa
这是我的剧本:
files=*
for f in $files
do
newname=$(echo $f|awk -F"/" '{print $NF;}'|cut -d'.' -f1);
less $f > less_$newname.txt
filename_$newname="less_$newname.txt"
done
出现以下错误:
filename_a=less_a.txt: command not found
filename_b=less_b.txt: command not found
我最终想要的是我目录中的4个文件:
a.fa
b.fa
less_a.txt
less_b.txt
两个名为filename_a
和filename_b
关于我怎么做的任何想法?谢谢!
答案 0 :(得分:1)
非常确定你想要一些不同的东西(希望更简单)来实现目标。
declare -A filename
for f in *
do
if [ -f "$f" ]
then
b="${f%.*}"
o="less_${b}.txt"
filename["$b"]="$o"
cp "$f" "$o"
fi
done
声明 -A 创建一个关联数组 - 这是一个比使用连接后缀更好的解决方案。 -f的测试确保我们只处理常规文件(而不是目录)。 $ {f%。*}剥离了扩展程序。 cp 将文件复制到新名称。
现在可以轻松迭代收集的文件名:
for k in "${!filename[@]}"
do
echo "${filename[$k]}"
done