我需要一个bash脚本来递归重命名带有空白扩展名的文件,以便在末尾添加.txt。我发现了以下脚本,但我无法弄清楚如何使其递归:
#!/bin/sh
for file in *; do
test "${file%.*}" = "$file" && mv "$file" "$file".txt;
done
感谢。
感谢。
答案 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 --
用于防止以连字符开头的路径。