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

标签 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"
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

如果一个文件包含多个扩展名,这将只替换最后一个。要删除所有 扩展,请使用%% 代替%

关于linux - 使用 BASH 脚本重命名多个不同的文件扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46292426/

相关文章:

linux - 守护进程时是否需要更改父进程?

linux - shell 错误 xargs : terminated by signal 11

Bash 流水线执行

shell - 是否有适用于 Windows 的 KornShell (ksh) IDE?

perl - Perl 脚本中的 SQL*Plus

linux - 检测参数的数量和传递给 bash 的值

java - 在 Java/Linux 应用程序中启动数千个计时器

node.js - child.stdout.on 适用于 read 但不适用 read -p

node.js - 无法执行二进制文件 exec 格式错误 windows bash

linux - Unix Shell 脚本中浮点值的关系运算符