使用bash,如何删除特定目录中所有文件的扩展名?

Jas*_*eet 3 linux bash shell sh

我想保留文件但删除其扩展名.这些文件没有相同的扩展名.我的最终目标是删除所有扩展并将其更改为我选择的一个扩展.我把第二部分放下了.

我的代码到目前为止:

#!/bin/bash
echo -n "Enter the directory: "
read path
            #Remove all extensions
find $path -type f -exec mv '{}' '{}'.extension \; #add desired extension
Run Code Online (Sandbox Code Playgroud)

Ini*_*ian 7

您不需要外部命令find,但bash单独执行此操作.下面的脚本从文件夹中的所有文件中删除扩展名path.

for file in "$path"/*; do
    [ -f "$file" ] || continue
    mv "$file" "${file%.*}"
done
Run Code Online (Sandbox Code Playgroud)

使用的原因[ -f "$file" ]仅用于安全检查.glob表达式"$ path"/*可能最终没有列出任何文件,在这种情况下mv命令会因为没有文件而失败.[ -f "$file" ] || continue$file变量为空时,该条件通过退出循环来保护它,其中[ -f "$file" ]返回失败错误代码.该||化合物中的语句中使用时,如果前一个命令失败运行,所以当continue未来被击中,for循环被终止.

如果你想添加一个新的扩展名就行了

mv "$file" "${file%.*}.extension"
Run Code Online (Sandbox Code Playgroud)