技术解析

文件名字中各种奇葩字符怎么批量去除呢
0
2021-06-22 06:07:29
idczone
  • 门罗音乐的文件 自己把 rar 文件名字中奇葩的字符去掉了一部分 批量解压开了
  • 解压得到的文件名字是目录 里面含有文件 一个或者多个文件
  • 部分目录名字如下
[87].Hemi-Sync.-.Human Plus.-.Do This Now
[88].Hemi-Sync.-.Human Plus.-.Eat-No Eat
[89].Hemi-Sync.-.Human Plus.-.Eight Great
[90].Hemi-Sync.-.Human Plus.-.Hypertension
[91].Hemi-Sync.-.Human Plus.-.Immunizing
[92].Hemi-Sync.-.Human Plus.-.Imprint
[93.Update].Hemi-Sync.-.Human Plus.-.Let-Go
[94].Hemi-Sync.-.Human Plus.-.Lungs Repairs and Maintenance
[95].Hemi-Sync.-.Human Plus.-.Mobius West
[96].Hemi-Sync.-.Human Plus.-.Nutricia
[97].Hemi-Sync.-.Human Plus.-.Off-Loading
[98].Hemi-Sync.-.Human Plus.-.Pain Control
[130].Hemi-Sync.-.MindFood.-.Soft and Still
[131].Hemi-Sync.-.MindFood.-.The ''SO'' Chord
[132].Hemi-Sync.-.MindFood.-.The Way of Hemi-Sync
[133].Hemi-Sync.-.Explore the Original.-.Beyond the Golden Light
[134].Hemi-Sync.-.Explore the Original.-.Connecting With Your Inner Guides
[135].Hemi-Sync.-.Explore the Original.-.Golden Mind
[136].Hemi-Sync.-.Explore the Original.-.Healing Journeys Support
[137].Hemi-Sync.-.Explore the Original.-.Inner States Dawning of Awareness
137Hemi-Sync.-.Explore the Original.-.Inner States Dawning of Awareness 内在意识的曙光
[138].Hemi-Sync.-.Explore the Original.-.The Music of Graceful Passages

  • 这里的.-.用了转义字符都无法搞定
  • 下面是我使用的方法
## 去掉改文件名开头的 “\[”
for file in ls \[*;
do
mv $file `echo $file | sed 's/\[//g'`;
done

## 去掉文件名字开头的“〖”
for file in ls 〖*;
do
mv $file `echo $file | sed 's/〖//g'`
done

#--------------
##去掉文件名中间的 "]"
for file in `ls | grep "]"`;
do
mv $file `echo $file | sed 's/]//g'`;
done

##去掉文件名字中间的“〗”
for file in `ls | grep "〗"`
do
mv $file `echo $file | sed 's/〗//g'`
done

## 去掉文件名字中间的“."
for file in `ls | grep "\."`
do
mv $file `echo $file | sed 's/\./-/g'`
done

##改-rar 为.rar
for file in `ls | grep "\-rar"`
do
mv $file `echo $file | sed 's/\-rar/.rar/g'`
done

##去掉文件名字中的“专辑名称:”
for file in `ls | grep "专辑名称:"`
do
mv $file `echo $file | sed 's/专辑名称://g'`
done

##去掉文件名字中的“:门罗研究所最广受欢迎的系列:”
for file in `ls | grep ":门罗研究所最广受欢迎的系列:"`
do
mv $file `echo $file | sed 's/:门罗研究所最广受欢迎的系列://g'`
done

## 批量解压 rar 到各自目录
for i in ls *.rar;
do
rar x $i
done
  • 希望把 [ ] .-. 之类的奇葩字符去掉 谢谢
  • 文件名的全部上传到了这里 有效期 14 天 https://transfer.sh/YqlQ3/name

不想写脚本的话,可以试试看这个小软件:RegexRenamer

用 bash 做这个要正确地搞定各种 blob 和数层 escape,考虑别的语言吧..

*各种 glob

直接 rename 命令吧

我的发行版 rename 还很奇葩 是个 gui 界面的试了一下还不行。。。

谢谢 回去试试

好的 谢谢

试下 Total Commander 批量重命名,文件名在 Sublime Text 或者 VS Code 里面批量处理一下,1 分钟搞定。

mv $file 改为 mv "$file"

安装 renameutils,使用 qmv

用 vim 可以随心欲的改。
http://vim.wikia.com/wiki/Bulk_rename_files_with_Vim
vim 的正则: http://vimregex.com/
例如匹配 行首大括号部分::/\[\d\+\.*.\+\],至于匹配 .-. 更容易了 :/\.-\.
替换使用 :%s,:%s/\[\d\+\.*.\+\]//gc,无需确认的话,去掉 c

这种有规律的,一般都是用 emacs 的 dired 解决

openSUSE15.0 官方没有这个包 只有 42.3 个人打包的一个。。。

试了 不行 里面的奇葩字符太多无法实现

这里的文件名字都是目录 不是单纯的单个 如果是单个文件的话用 kate 就能搞定了

没玩过 emacs。。。。。

好头像,我还有个 blackbetty passport 呢。看到这个标志,真情怀啊、

ls -i
找到文件对应的 inode number
然后
find -inum 刚才找到的 inodenum -exec mv '{}' '新文件名' \;

我的卖了。。。。

我试试 谢谢

你认真看过 Bulk_rename_files_with_Vim 这个链接了吗?
第一步就是教怎么批量把文件或目录名导入 vim,然后是通过正则替换生成批量的 mv 命令,最后是执行。
我没明白你说的单个文件是什么意思。

我看看谢谢

1、批量替换 "." 为 " "
2、批量替换 " - " 为 " "
3、批量替换 " 扩展名" 为 ".扩展名"

1. (\.)?-(\.)? 替换为 -
2. (\[)?(\d+)(\]|\.Update)?(\]|\.)? 保留第二组并加一个空格
另外你给的文件名只能说明你的暴力替换完全没用……

弄好一部分了 谢谢各位的回答
特别感谢

@redsonic

cat ~/下载 /name | while read line; do echo $line | sed -e 's/[.|-]/ /g' -e 's/\[/ /' -e 's/\]/ /' ; done

刚弄好了 谢谢你

cat name | sed 's/\[//g' | sed 's/\]//' | sed "s/[.-]//g"
01HemiSyncMetaMusicAngel Paradise 天使乐园
02HemiSyncMetaMusicAscension 耶稣升天
03HemiSyncMetaMusicBaroque Garden
04HemiSyncMetaMusicBetween Worlds
05HemiSyncMetaMusicBreakthrough for peakperformance
06HemiSyncMetaMusicChakra Journey
07HemiSyncMetaMusicCloudscapes
08HemiSyncMetaMusicConvergence
不知道是不是要这样的效果

mv $file "$(echo $file | tr -d '[]-.')"

是的 请问你是哪种方法实现的?


cat name | sed 's/\[//g' | sed 's/\]//' | sed "s/[.-]//g"

感觉直接替换掉就 OK 吧? 替换之后简单看了下,和 楼的好像是一样的。
在 vim 中 `:%s/[\[\]\.-]//g`
或者如果用的是 PowerShell: `(gc name.txt -Encoding Default) -replace "[\[\]\.-]",""`

ls | xargs awk '{printf("mv %s `echo %s \ sed -E s/[^0-9A-Za-z]//g`",$1,$1)}' | sh
手机码字,自行调试

从后往前匹配

学习学习

ls \[* | while read line ; do new_name=$(echo "${line}" | sed 's!\[!!g' | sed 's!\]!!g' | sed 's!\.-\.!_!g') ; mv "${line}" "${new_name}" ; done
ls [ 开头的文件,会产生每行一个文件名
循环每行的文件名:
3 个 sed 分别移除 [、移除 ]、替换 .-. 成 _,形成新的 name
然后 mv 老文件名 新文件名

实际上不行 谢谢回复

可是,我都已经跑完了啊…
数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服