批量编辑文件 '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##*/}
仅获取文件名。
我正在尝试学习如何批量编辑文件并从中提取信息。我开始尝试创建一些试用文件并编辑它们的名称。我试图搜索但找不到我在任何地方的问题。 如果它已经得到回答,我很乐意被引导到 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##*/}
仅获取文件名。