Shell 使用前缀Unix批量重命名目录
我正在尝试在Unix中使用前缀批量重命名目录。像abc这样的前缀- 所以如果当前目录是123,我想把它改成abc-123,等等 我试过了Shell 使用前缀Unix批量重命名目录,shell,unix,Shell,Unix,我正在尝试在Unix中使用前缀批量重命名目录。像abc这样的前缀- 所以如果当前目录是123,我想把它改成abc-123,等等 我试过了 for d in $(find . -name '*' -type d) ; do mv $d $(echo $d | sed 's/$d/abc-$d/g') done 但这不起作用。很少编写shell脚本,因此我们将非常感谢您的帮助。 重命名命令不可用 谢谢大家! 试试看: for d in $(find . -depth -type d); do
for d in $(find . -name '*' -type d) ; do
mv $d $(echo $d | sed 's/$d/abc-$d/g')
done
但这不起作用。很少编写shell脚本,因此我们将非常感谢您的帮助。
重命名命令不可用
谢谢大家! 试试看:
for d in $(find . -depth -type d); do
b=$(basename $d)
p=$(dirname $d)
mv -v $d $p/abc-$b
done
请注意,-depth
参数非常重要:它确保从下到上处理目录,以便您在重命名父目录之前重命名子目录。如果您不这样做,那么您将尝试重命名不再存在的路径
另外,我建议将第4行替换为
echo "mv -v $d $p/abc-$b"
然后先运行这个版本的循环,这样你就可以在真正尝试之前看到它会做什么。如果我理解你的问题,你可以用一行代码和
find-exec
这样做
find . -type d -depth -execdir mv {} abc-{} \;
你用哪种外壳?例如,在zsh中,这是简单的-
zmv-Q'(*)(/)'abc-$1'
。在bash中,它更复杂,正确地执行它需要一个循环。+1,但为了更好地支持递归情况,请使用-execdir
,并添加-depth
mv:rename。至abc-:无效参数
mv:rename./dir to abc-./x-dir:没有这样的文件或目录。
-depth-execdir
将修复除
之外的所有问题。这非常有效,谢谢!不支持verbose标志,但这很好,另外,我只重命名顶级目录。标记作为答案。