Bash 如何递归地从文件名中删除字符串

Bash 如何递归地从文件名中删除字符串,bash,Bash,读取文件夹的名称,在文件名中查找并将其删除,例如: -- \约翰·卡特 Marscatter-John Carter.pdf \Sylvia Alter\ Corre y no pares.mobi \Other Name\ see the diabolis.epub \西尔维亚·奥尔特 西尔维亚·奥尔特·科雷·莫比 \其他名称 其他名称-请参阅debulic.epub 它应该是这样的: -- \约翰·卡特 marsCarter.pdf \Sylvia Alt

读取文件夹的名称,在文件名中查找并将其删除,例如:

-- \约翰·卡特
Marscatter-John Carter.pdf

\Sylvia Alter\
        Corre y no pares.mobi

\Other Name\
        see the diabolis.epub
\西尔维亚·奥尔特
西尔维亚·奥尔特·科雷·莫比

\其他名称
其他名称-请参阅debulic.epub

它应该是这样的:

-- \约翰·卡特
marsCarter.pdf

\Sylvia Alter\
        Corre y no pares.mobi

\Other Name\
        see the diabolis.epub
你能给我一个主意吗​​如何得到它。谢谢

您可以使用
basename(1)
dirname(1)
获取文件名和文件夹名

> basename "./John Carter/marsCarter - John Carter.pdf"
> marsCarter - John Carter.pdf

> basename "$(dirname "./John Carter/marsCarter - John Carter.pdf")"
> John Carter
这样,您可以尝试使用
sed(1)
从文件名中删除文件夹名

> echo "marsCarter - John Carter.pdf" | sed -r 's/ - John Carter//'
> marsCarter.pdf

谢谢你的回答。我曾考虑过类似的事情,但我把事情弄得一团糟,让它在同一个目录中递归更多的文件夹。非常感谢。