0

我必须做一个简单的设计,但我不知道怎么做

我有两个文件夹文件夹 A 和文件夹 B。在文件夹 A 内,我有两个名为“file_”和“file_anything”的文件。第二个文件的“任何”部分是一些我不知道的文本(或者对于不同的文件夹可能不同)。我需要做的是将文件夹B的名称更改为任何文本是“任何东西”,而无需特别知道

如果在程序之外有人给我一个指向您用来理解并能够修改或调整解决方案以适应其他情况的主题的链接,我会很感激。我想学习

谢谢

编辑:我需要将此解决方案包含在 bash 脚本(无 perl 函数)中,该脚本将对许多具有相同结构的文件夹重复。例如:

FolderA(带有文件“file_”和“file_manana”)和FolderB---更改为---> FolderA和manana(以前的FolderB)

FolderC(带有文件“file_”和“file_monkey”)和FolderD---更改为---> FolderA和monkey(以前的FolderD)

FolderE(带有文件“file_”和“file_moose”)和FolderF---更改为---> FolderA和moose(以前的FolderF)

很多次有更多的文件夹

编辑2:

好的,我越来越近了。现在的问题是:我这样定义 fn:fn=file_a* 知道该文件夹中只有一个与该指示匹配的文件。我确认这样做 echo $fn。现在我这样做:fn=${fn##*_}。但是,fn 不会转换为“anything”,而是转换为“a*”。我该怎么解决?@大卫扎斯拉夫斯基

编辑 3:谢谢@chepner。BASH_REMATCH 是要走的路。我稍作改动就使用它,因为您编写它的方式对我不起作用

for f in FolderA/file_*; do # I assume a single match
[[ $f =~ "file_"(.*) ]]
suffix=${BASH_REMATCH[1]}
mv FolderB "$suffix"
done

注意引号。在它们之间我什至可以包含空格

谢谢大家

4

2 回答 2

0

您需要在Bash 手册中查找参数扩展。如果您将 的名称存储file_anything在变量中,例如fn,您可以使用从文件名${fn##*_}中删除最长的前缀匹配*_,然后您可以在mv命令中使用它来重命名文件夹 B。

于 2013-03-05T22:36:54.520 回答
0

我不太明白您的最终结果应该是什么,但是您可以file_anything使用以下内容提取尾随部分:

$ f="file_manana"
$ [[ $f =~ file_(.*) ]]
$ suffix=${BASH_REMATCH[1]}
$ echo $suffix
manana

所以我认为你想做的是

for f in FolderA/file_*; do # I assume a single match
    [[ $f =~ file_(.*) ]]
    suffix=${BASH_REMATCH[1]}
    mv FolderB "$suffix"
done
于 2013-03-06T13:22:07.887 回答