Linux 删除两个字符之间的文件名bash

Linux 删除两个字符之间的文件名bash,linux,bash,sed,Linux,Bash,Sed,我在一个目录中有一组文件,如下所示: Filename - XXXXXXXXXXXXXXXXXXX.mp3 那里有19个X。我需要一个bash脚本或类似的脚本来循环并删除我目录中所有文件的X 我已经浏览了这个站点和其他站点,并看到了使用sed命令的示例,但我个人还没有适应我的具体需要。我为我缺乏信息而道歉,我对这门语言相当陌生,不知道从哪里开始 这是一个python脚本,应该重命名所有文件并删除x 除第一行外,你应该阅读所有以开头的行 #!/usr/bin/env python import

我在一个目录中有一组文件,如下所示:

Filename - XXXXXXXXXXXXXXXXXXX.mp3
那里有19个X。我需要一个bash脚本或类似的脚本来循环并删除我目录中所有文件的X


我已经浏览了这个站点和其他站点,并看到了使用sed命令的示例,但我个人还没有适应我的具体需要。我为我缺乏信息而道歉,我对这门语言相当陌生,不知道从哪里开始

这是一个python脚本,应该重命名所有文件并删除x

除第一行外,你应该阅读所有以开头的行

#!/usr/bin/env python
import os
for i in os.listdir("."):
    #You can change the number to whatever number of X's you want
    x = "X"*19
    #If you don't want to get rid of the ' - ', then put a '#' (without quotes) in front of the next line
    x = " - "+x
    new = i.replace(x, "")
    print(os.rename(i,new))
将此文件另存为XXX.py,然后通过执行以下操作授予它正确的权限:

sudo chmod +x XXX.py
然后使用以下命令运行它:

./XXX.py
或者如果您的用户没有正确的权限:

sudo ./XXX.py
如果程序返回错误输出,则:

尝试使用sudo或Try:

sudo python XXX.py

不管有没有sudo。

Python的答案可能更可取,因为从web上复制paste bash one行程序是危险的,但现在我们开始:

以下for循环将:

列出所有mp3文件,仅选择扩展名前有19个bug alert:或更多XE的文件 将每个文件回显到屏幕上,但先删除19个连续的X 测试:

对于*xxxxxxxxxxxx.mp3中的文件;doecho$echo${FILE}| sed-E's/X{19}/';完成

此婴儿更改文件名而不是echo:

更改名称:

对于*xxxxxxxxxxxx.mp3中的文件;do mv${FILE}$echo${FILE}| sed-E's/X{19}/';完成

小心使用…

您实际上不需要sed。只需使用一个按钮

如果键入Xs真的让你讨厌

printf -v Xs 'X%.0s' {1..19}
for file in *$Xs.mp3; do
    mv "$file" "${file//$Xs}"
done

欢迎来到堆栈溢出。请看这一页。为了逼真起见,如果你说有19个X,你的例子应该包括19个X。您希望生成的文件名为Filename-.mp3,还是希望删除空格和破折号以及X?如果有18个或20个X的文件,您希望它们也被更改,还是完全不受影响?…我希望它们被重命名为Filename.mp3这样做从来都不是一个好主意。在这两个示例中,您可以轻松地对*xxxxxxxxxxxxxxxx.mp3中的文件执行以下操作:;谢谢你的评论。你是绝对正确的,我按照你的建议编辑了我的答案,最好不要把我自己的坏习惯传给世界…谢谢,这很有效!谢谢你的介绍。令人惊叹的
printf -v Xs 'X%.0s' {1..19}
for file in *$Xs.mp3; do
    mv "$file" "${file//$Xs}"
done