这是一个初学者的问题:我正在尝试编写一个 .sh 文件来自动重命名目录中的文件。
该文件看起来类似于
for fileName in directory
do
mv fileName "NewPrefix"+fileName
done
我正在思考如何写这个
for fileName in directory
部分。
我尝试了以下操作:
dir = '.'
for fileName in dir
这是有效的,但每当我运行这个脚本时,我就会得到dir: cannot access =: No such file or directory.
为什么?
答案1
您的代码存在几个问题:
- Bash 变量使用
$VAR
,注意$
前面的 。如果省略美元符号,它将被视为常规字符串。 - Bash 文件名通配符需要通配符(
*
、?
等)。您的示例.
将匹配文件夹.
,即当前文件夹。 - 变量用 来设置
VAR=VALUE
。等号周围没有空格。VALUE
如果有空格,则必须用引号引起来。 - 字符串连接自动发生。符号在该位置
+
插入文字。+
- 除非有理由不这样做,否则变量应始终用双引号引起来。
考虑到这些要点,这里是您的脚本的工作版本。
cd /path/to/folder
for file in ./*
do
mv "$file" "NewPrefix$file"
done
If 条件
如果条件使用如下:
if [[ "$file" == "New"* ]]
then
# Do something here
fi
请注意星号是外部双引号。