我有一个包含数千个子目录的目录。结构如下:
目录:
- 1
- 2
- 三十
- 109
我想通过在当前名称上添加 10000 来重命名所有目录。例如
目录:
- 10001
- 10002
- 10030
- 10109
我已经写了这个脚本
for f in *; do
if [[ -d $f ]]; then
echo $f
newd='expr $f + 10000'
echo $newd
mv $f newd
fi
done
从 2 中echo
,我可以看到 1 和 10001。但实际上mv
将我的所有目录移动到了一个名为 newd 的新文件夹中。我试过 $newd,但效果不好。
怎样才能使这个东西发挥作用呢?
答案1
尝试这个:
for f in *; do
if [[ -d $f ]] ; then
mv "$f" $(($f + 1000))
fi
done
答案2
如果你这么做会怎么样?
for f in *; do
if [[ -d $f ]]; then
echo $f
newd=`expr $f + 10000`
echo $newd
mv "$f" "$newd"
fi
done
也就是说,将引号改为expr $f + 10000
反引号,这样它们就可以就地执行,结果会存储在变量中。另外,确保行$newd
上有美元符号mv
。
我对自己不是 100% 确定,因此请确保在尝试之前进行备份,或者尝试一些测试文件/目录。
编辑:在答案中添加了双引号,因为它们是必需的。
答案3
您还可以使用rename
:
for f in *; do
[ -d "$f" ] && rename -n 's/$_/$_+1000/e' "$f"
done
如果要重命名每个文件或目录,只需运行:
rename -n 's/$_/$_+1000/e' *