如何使用字符串替换重命名 linux 目录中的所有文件?
How to rename all files in a directory in linux with string substitution?
我想重命名 linux 系统目录中的多个文件....
我的文件名是:
Lec 1 - xxx.webm
Lec 2 - xxx.webm
Lec 3 - xxx.webm
Lec 4 - xxx.webm
并且列表还在继续...
这里的xxx可以是任意字符列表(不一致)....
我想重命名这里的每个文件,如:
mv Lec 1 - xxx.webm Lec 1.webm
mv Lec 2 - xxx.webm Lec 2.webm
mv Lec 3 - xxx.webm Lec 3.webm
等等....
for in 循环可以,但是如何进行替换?
*去掉数字后面的所有字符应该是我重命名后的文件
这个 for 循环应该可以完成工作:
for f in *.webm; do
mv "$f" "${f/ -*/}.webm"
done
${string%substring}
:从 $string
.
后面删除 $substring
的最短匹配
for i in *.webm; do mv $i ${i%xxx}; done
或查看:
${string%%substring}
:从 $string
.
后面删除最长的 $substring
匹配项
如果您安装了 util-linux-ng
:
find . -name "Lec*.webm" | xargs rename s/ -*//
或:
for file in $(find . -name "Lec*.webm")
do
echo mv "$file" "`echo $file | sed s/ -*$//`"
done
我想重命名 linux 系统目录中的多个文件....
我的文件名是:
Lec 1 - xxx.webm
Lec 2 - xxx.webm
Lec 3 - xxx.webm
Lec 4 - xxx.webm
并且列表还在继续...
这里的xxx可以是任意字符列表(不一致)....
我想重命名这里的每个文件,如:
mv Lec 1 - xxx.webm Lec 1.webm
mv Lec 2 - xxx.webm Lec 2.webm
mv Lec 3 - xxx.webm Lec 3.webm
等等....
for in 循环可以,但是如何进行替换?
*去掉数字后面的所有字符应该是我重命名后的文件
这个 for 循环应该可以完成工作:
for f in *.webm; do
mv "$f" "${f/ -*/}.webm"
done
${string%substring}
:从 $string
.
$substring
的最短匹配
for i in *.webm; do mv $i ${i%xxx}; done
或查看:
${string%%substring}
:从 $string
.
$substring
匹配项
如果您安装了 util-linux-ng
:
find . -name "Lec*.webm" | xargs rename s/ -*//
或:
for file in $(find . -name "Lec*.webm")
do
echo mv "$file" "`echo $file | sed s/ -*$//`"
done