纯Bash实现:在极简Linux环境下替换文件夹前缀test为ftp
纯Bash实现文件夹前缀替换方案(无rename/sed工具)
没问题,咱们用纯Bash自带的功能就能搞定这个需求,完全不需要依赖rename、sed这些额外工具。这里给你两种靠谱的实现方法:
方法一:利用Bash参数扩展(最推荐)
Bash本身就支持参数扩展,这是最简洁高效的方式,代码如下:
for dir in test_*; do # 先确认当前项是文件夹,避免误操作文件 if [ -d "$dir" ]; then mv "$dir" "ftp${dir#test}" fi done
简单解释下这段代码:
for dir in test_*:遍历当前目录下所有以test_开头的项目[ -d "$dir" ]:做个安全校验,确保只处理文件夹,不会碰同名的文件"ftp${dir#test}":核心的替换逻辑,${dir#test}会去掉变量dir开头的test字符串,再拼接上ftp就得到了新的文件夹名
方法二:字符串截取(兼容老版本Bash)
如果你的服务器上是特别老旧的Bash版本,参数扩展可能有兼容性问题,可以用字符串截取的方式:
for dir in test_*; do if [ -d "$dir" ]; then # 获取原文件夹名的长度 name_length=${#dir} # 从第5个字符开始截取("test"是4个字符,索引从0开始) suffix=${dir:4:$name_length} mv "$dir" "ftp$suffix" fi done
这个逻辑也很直观:先拿到原名字的长度,再从第5个字符开始截取后面的部分,最后拼接ftp前缀完成替换。
安全小提示
执行前建议先预览一下要执行的操作,避免出错。把mv换成echo mv就行,这样只会打印出要执行的重命名命令,确认没问题再换成真实的mv:
for dir in test_*; do if [ -d "$dir" ]; then echo mv "$dir" "ftp${dir#test}" fi done
内容的提问来源于stack exchange,提问作者giordano
相关产品推荐
相关产品推荐

