我正在编写一个bash脚本,该脚本将当前目录中文件名中的空格更改为下划线。这是脚本:
#!/bin/bash
for fil in "$(pwd)"/*; do
basefil=$(basename "$fil") #get name of file
name=${basefil// /_}
if [[ ! -f "$name" ]]; then
echo "$fil" "$name"
mv "$fil" "$name"
fi
done
问题是我得到了这样的东西:
mv: cannot move '/home/gustavolozada/Downloads/prueba' to a subdirectory of itself, 'prueba/prueba'
我只在目录中得到这个。我添加了echo "$fil" "$name"
以获得更多信息,这就是它所显示的:
/home/gustavolozada/Downloads/prueba prueba
我不明白问题出在哪里,因为命令基本上是:
mv /home/gustavolozada/Downloads/prueba prueba
对我来说没有任何问题(除了它们是同一个文件之外,但我已经用if [[ ! -f "$name" ]]; then
检查了目录中是否有同名文件
这只是一个奇怪的解释:由于错误案例中的name
的值为prueba/prueba
,但是通过basename
计算的,因此它不应该包含任何斜杠。Downloads/prueba
可能是符号链接吗?