Bash:如何替换文件夹前缀

Bash:如何替换文件夹前缀,bash,replace,Bash,Replace,我有一堆文件夹: test_001 test_002 我想用ftp替换前缀测试,以获得: 有一个问题:我可以在Linux服务器上进行访问,只需很少的安装。例如,未安装rename,甚至可能未安装sed。那么,如何使用纯bash替换前缀呢 由于您的安装量很小,我尝试发出一个不需要tr、sed或find的命令 输入: $ tree . . ├── a ├── b ├── c ├── test_001 └── test_002 2 directories, 3 files for d in */

我有一堆文件夹:

test_001
test_002
我想用ftp替换前缀测试,以获得:


有一个问题:我可以在Linux服务器上进行访问,只需很少的安装。例如,未安装rename,甚至可能未安装sed。那么,如何使用纯bash替换前缀呢

由于您的安装量很小,我尝试发出一个不需要
tr
sed
find
的命令

输入:

$ tree .
.
├── a
├── b
├── c
├── test_001
└── test_002

2 directories, 3 files
for d in */; do mv "${d:0:-1}" "ftp"${d:4:-1}; done
tree .
.
├── a
├── b
├── c
├── ftp_001
└── ftp_002

2 directories, 3 files
CMD:

$ tree .
.
├── a
├── b
├── c
├── test_001
└── test_002

2 directories, 3 files
for d in */; do mv "${d:0:-1}" "ftp"${d:4:-1}; done
tree .
.
├── a
├── b
├── c
├── ftp_001
└── ftp_002

2 directories, 3 files
输出:

$ tree .
.
├── a
├── b
├── c
├── test_001
└── test_002

2 directories, 3 files
for d in */; do mv "${d:0:-1}" "ftp"${d:4:-1}; done
tree .
.
├── a
├── b
├── c
├── ftp_001
└── ftp_002

2 directories, 3 files

关于bash中
子字符串的解释:

这个小脚本可能会有帮助:

for dir in */
do
    mv "$dir" "${dir/test/ftp}"
done
test\u 00x
目录的父目录下执行它

它可以写在紧凑的一行中:

for dir in */; do mv "$dir" "${dir/test/ftp}"; done

你为自己做了什么?我们需要看到最少的代码,以确保您已经尝试过atleast@Inian我是bash新手,通常在Windows上使用Perl来实现这类功能。从web上我发现:
for I in$test*;执行mv“$i”“${i/'test'/}”;完成
。此代码删除前缀。然后我可以添加新前缀:
for I in$test*;进行mv“$i”测试$i”;完成
。这是可行的,但我希望有一个更好理解的解决方案,因为这段代码的第一部分对我来说是神秘的(什么意思是I/)。通常我可以理解这个意思,但在这种情况下,这个解决方案的优点是它只考虑文件。非常有用。我接受KANTS解决方案,因为它只考虑带有前缀的文件。如果还考虑到我不想更改的目录(不仅是a、b、c,还有tttt_xxx),我应该问这个问题。