Linux 使用BASH脚本重命名多个不同的文件扩展名
我正在尝试创建一个bash脚本,该脚本包含一个目录,其中包含所有不同类型扩展名的文件(大约500个文件)(不严重,比如30种不同类型的扩展名),我希望去掉所有扩展名,并用.txt替换它们 我已经四处搜索了一段时间,只能找到使用指定扩展并将其更改为另一个指定扩展的示例。 如png-->jpg或.doc-->.txt 下面是我发现的一个例子:Linux 使用BASH脚本重命名多个不同的文件扩展名,linux,bash,unix,Linux,Bash,Unix,我正在尝试创建一个bash脚本,该脚本包含一个目录,其中包含所有不同类型扩展名的文件(大约500个文件)(不严重,比如30种不同类型的扩展名),我希望去掉所有扩展名,并用.txt替换它们 我已经四处搜索了一段时间,只能找到使用指定扩展并将其更改为另一个指定扩展的示例。 如png-->jpg或.doc-->.txt 下面是我发现的一个例子: # Rename all *.txt to *.text for f in *.txt; do mv -- "$f" "${f%.txt}.text" do
# Rename all *.txt to *.text
for f in *.txt; do
mv -- "$f" "${f%.txt}.text"
done
这是可行的,但只有当你从.txt转到.text时,我才有多个不同的扩展名
我目前的代码是:
directory=$1
for item in $directory/*
do
echo mv -- "$item" "$item.txt";
done
这会将.txt附加到它们上,但不幸的是,我仍然保留了之前的附加文件。例如filename.etc.txt、filename.bla.txt
我做错了吗?非常感谢您的帮助。对第一个示例来说,这只是一个小改动:
cd "$directory"
# Rename all files to *.txt
for f in *
do
mv -- "$f" "${f%.*}.txt"
done
如果文件包含多个扩展名,则仅替换最后一个扩展名。要删除所有扩展名,请使用
%%
代替%%
为什么不使用regex?我对regex的了解非常有限,您能详细说明一下吗?谢谢!这非常有效,但我不了解move函数内部发生了什么,%.*如何改变这种情况?请阅读bash(1)
手册页或文档中的“模式匹配”部分。