Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 使用BASH脚本重命名多个不同的文件扩展名_Linux_Bash_Unix - Fatal编程技术网

Linux 使用BASH脚本重命名多个不同的文件扩展名

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

我正在尝试创建一个bash脚本,该脚本包含一个目录,其中包含所有不同类型扩展名的文件(大约500个文件)(不严重,比如30种不同类型的扩展名),我希望去掉所有扩展名,并用.txt替换它们

我已经四处搜索了一段时间,只能找到使用指定扩展并将其更改为另一个指定扩展的示例。 如png-->jpg或.doc-->.txt

下面是我发现的一个例子:

# 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)
手册页或文档中的“模式匹配”部分。