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

时间:2015-02-05 00:14:58

标签: linux bash sed

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

Filename - XXXXXXXXXXXXXXXXXXX.mp3

哪里有19个X&#39。我需要一个bash脚本或类似的循环并删除我目录中所有文件的X.

我已经浏览了这个网站以及其他网站,并且已经看到了使用sed命令的示例,但我个人无法根据我的具体需求进行调整。我为我缺乏信息而道歉,我对这种语言还不熟悉,也不知道从哪里开始。

3 个答案:

答案 0 :(得分:0)

这是一个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或尝试:

sudo python XXX.py

有或没有sudo。

答案 1 :(得分:0)

Python的答案可能更可取,因为复制粘贴" bash"是危险的。来自网络的单行,但我们走了:

以下for循环将:

  1. 列出所有mp3文件,只选择那些19(错误提醒:或扩展前的更多Xes)
  2. 将每个文件回显到屏幕,但首先删除19个连续的Xes
  3. 测试:

    for FILE in *XXXXXXXXXXXXXXXXXXX.mp3; do echo $(echo ${FILE} | sed -E 's/X{19}//'); done

    这个宝贝改变了文件的名称而不是" echo":

    更改名称:

    for FILE in *XXXXXXXXXXXXXXXXXXX.mp3; do mv ${FILE} $(echo ${FILE} | sed -E 's/X{19}//'); done

    谨慎使用......

答案 2 :(得分:0)

你真的不需要sed。只需使用parameter expansion

for file in *XXXXXXXXXXXXXXXXXXX.mp3; do
    mv "$file" "${file//XXXXXXXXXXXXXXXXXXX}"
done

如果输入X确实让你感到烦恼......

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