我在一个目录中有一组文件,看起来像:
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或尝试:
sudo python XXX.py
有或没有须多。
您实际上并不需要sed
。只需使用参数展开即可。
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
Python的答案可能更可取,因为从web复制粘贴"bash"一行代码是危险的,但现在我们开始:
以下为环路:
- 列出所有mp3文件,只选择带有19个的文件(错误警报:扩展之前有更多Xe)
- 将每个文件回显到屏幕,但首先删除19个连续Xe
测试:
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
小心使用。。。