簡體   English   中英

如何刪除文件名中的特殊字符?

[英]How to remove special characters in file names?

在創建播放列表時,我經常遇到會破壞播放過程的文件。 這將是帶有空格或撇號的文件。 我會用以下命令修復它

for file in *.; do mv "$file" `echo $file | tr " " '_'` ; done **(for spaces)**

現在我經常遇到帶有逗號,撇號,括號和其他字符的文件。 如何修改命令以刪除此類字符?

還嘗試rename 's/[^a-zA-Z0-9_-]//' *.mp4但它似乎沒有刪除空格或逗號

如果你向它添加g修飾符,你的rename將起作用,這將執行所有替換而不是僅執行第一個替換:

$ echo "$file"
foo bar,spam.egg

$ rename -n 's/[^a-zA-Z0-9_-]//' "$file"
foo bar,spam.egg renamed as foobar,spam.egg

$ rename -n 's/[^a-zA-Z0-9_-]//g' "$file"
foo bar,spam.egg renamed as foobarspamegg

您可以通過參數擴展單獨使用bash

  • 為了從文件名中刪除除a-zA-Z0-9_-之外a-zA-Z0-9_-所有內容,假設變量file包含文件名,使用字符類[:alnum:]匹配當前locale中的所有字母字符和數字:

     "${file//[^[:alnum:]_-]/}" 

    或明確地,將LC_COLLATE更改為C

     "${file//[^a-zA-Z0-9_-]/}" 

例:

$ file='foo bar,spam.egg'

$ echo "${file//[^[:alnum:]_-]/}"
foobarspamegg
for file in *; do mv "$file" $(echo "$file" | sed -e 's/[^A-Za-z0-9._-]/_/g'); done &

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM