linux - 如何删除文件的扩展名?

标签 linux bash unix cygwin

我有一个文件夹,里面装满了 .bak 文件和一些其他文件。我需要删除该文件夹中所有 .bak 文件的扩展名。如何创建一个接受文件夹名称的命令,然后删除该文件夹中所有 .bak 文件的扩展名?

谢谢。

最佳答案

要从 BASH 变量的末尾删除字符串,请使用 ${var%ending} 语法。它是 a number of string manipulations available to you in BASH 之一.

像这样使用它:

# Run in the same directory as the files
for FILENAME in *.bak; do mv "$FILENAME" "${FILENAME%.bak}"; done

作为单行代码效果很好,但您也可以将其包装为脚本以在任意目录中工作:

# If we're passed a parameter, cd into that directory. Otherwise, do nothing.
if [ -n "$1" ]; then
  cd "$1"
fi
for FILENAME in *.bak; do mv "$FILENAME" "${FILENAME%.bak}"; done

请注意,虽然引用您的变量几乎总是一个好习惯,但如果您的任何文件名可能包含空格,for FILENAME in *.bak 仍然是危险的。阅读 David W. 的答案以获得更强大的解决方案,以及 this document寻找替代解决方案。

关于linux - 如何删除文件的扩展名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17843889/

相关文章:

c - 包含一些 .so 文件

linux - 将目录更改为参数(如果给定) - Bash 脚本

c++ - Unix C++ 简单服务器问题 : sending data back to browser

linux - 从 root (unix) 运行脚本时变量不存储值

bash - 如何确定文件是否不可在 bash 脚本中执行

将 unix 时间戳转换为 YYYY-MM-DD HH :MM:SS

linux - 遍历用户输入

php - 不同的操作系统和服务器路径

c - 文件删除/修改期间的 libevent

bash 函数在 zsh env 中不起作用