所以我有这个bash脚本,它将重命名当前目录中的所有文件。我需要帮助修改它,所以我可以只指定将被重命名的某些文件,但仍然能够将其传递给目录。我对bash并不是很熟悉,所以这对我来说相当混乱。
my-dev-svr
答案 0 :(得分:0)
您的脚本有很多初学者错误,但标题中的实际问题有一些优点。
对于这样的任务,我会选择递归解决方案。
tolower () {
local f g
for f; do
# If this is a directory, process its contents first
if [ -d "$f" ]; then
# Recurse -- run the same function over directory entries
tolower "$f"/*
fi
# Convert file name to lower case (Bash 4+)
g=${f,,}
# If lowercased version differs from original, move it
if [ "${f##*/}" != "${g##*/}" ]; then
mv "$f" "$g"
fi
done
}
注意如何引用包含文件名总是的变量(否则,您的脚本将在包含shell元字符的字符的文件名上失败)以及Bash如何built-in functionality for lowercasing a variable's value(在最近的版本中。)
此外,在请求人工调试帮助之前,切向,don't use ls
in scripts并尝试http://shellcheck.net/。