如何使用bash脚本

时间:2016-03-14 18:59:31

标签: bash recursion rename

我需要一个bash脚本来递归重命名带有空白扩展名的文件,以便在末尾添加.txt。我发现了以下脚本,但我无法弄清楚如何使其递归:

#!/bin/sh
for file in *; do
test "${file%.*}" = "$file" && mv "$file" "$file".txt;
done

感谢。

感谢。

2 个答案:

答案 0 :(得分:1)

您可以将繁重的工作委托给find

$ find . -type f ! -name "*.*" -print0 | xargs -0 -I file mv file file.txt

假设没有扩展意味着没有名义上的句号。

答案 1 :(得分:0)

如果您不介意使用递归函数,那么您可以使用旧的Bash版本执行此操作:

shopt -s nullglob

function add_extension
{
    local -r dir=$1

    local path base
    for path in "$dir"/* ; do
        base=${path##*/}
        if [[ -f $path && $base != *.* ]] ; then
            mv -- "$path" "$path.txt"
        elif [[ -d $path && ! -L $path ]] ; then
            add_extension "$path"
        fi
    done

    return 0
}

add_extension .

mv --用于防止以连字符开头的路径。