批量编辑文件 'stuck at weird place'

Batch editing files 'stuck at weird place'

我正在尝试学习如何批量编辑文件并从中提取信息。我开始尝试创建一些试用文件并编辑它们的名称。我试图搜索但找不到我在任何地方的问题。 如果它已经得到回答,我很乐意被引导到 link。

所以,我写了下面的代码:

#!/bin/bash

mkdir -p ./trialscript
echo 
i=1
while [ $i -le  ]  
do
    touch ./trialscript/testfile$i.dat
    i=$(($i+1))
done

for f in ./trialscript/*.dat 
do 
    echo $f
    mv "$f" "$fhello.dat"
done

这似乎不起作用,我认为这是因为回显输出如下:

4
./trialscript/testfile1.dat
./trialscript/testfile2.dat
./trialscript/testfile3.dat
./trialscript/testfile4.dat

我只需要 'f' 中的文件名而不是完整路径,然后重命名即可。 有人可以建议我的代码中有什么问题,以及做我正在做的事情的正确方法是什么。

如果你想移动文件,你也必须使用路径,否则mv将无法找到它。

mv 命令的目标规范问题更多。您正在使用

"$fhello.dat"

这实际上意味着 "content of the $fhello variable plus the string .dat"。穷人shell怎么知道缝在哪里?使用

"${f}hello.dat"

消除歧义。

此外,要提取部分字符串,请参阅 man bash 中的参数扩展。您可以使用 ${f%/*} 仅获取路径,或使用 ${f##*/} 仅获取文件名。