創建播放列表時,我經常遇到會破壞播放過程的文件。這將是帶有空格或撇號的文件。我會用下面的命令修復它如何刪除文件名中的特殊字符?
for file in *.; do mv "$file" `echo $file | tr " " '_'` ; done **(for spaces)**
現在我更經常遇到帶有逗號,撇號,括號和其他字符的文件。我將如何修改命令來刪除這些字符?
也試過rename 's/[^a-zA-Z0-9_-]//' *.mp4
但它似乎沒有去掉空格或逗號
創建播放列表時,我經常遇到會破壞播放過程的文件。這將是帶有空格或撇號的文件。我會用下面的命令修復它如何刪除文件名中的特殊字符?
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_-
從文件名除去一切,假設變量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 &
我修改您的代碼一點,得到了我所需要的只是它似乎是它留下了一個逗號,並沒有將其刪除:在* .MP4文件;做mv「$ file」'echo「$ {file // [^ [:alnum:] _-。] /}」'; DONE – Andy