我必须在 Ubuntu 上编写一个脚本,它将路径目录指定的所有文件重命名为大写。我已经找到了一个可以重命名文件的循环,但我不确定如何将路径传递给这个循环。你能帮助我吗?
这是循环:
for f in *; do
mv "$f" "$f.tmp";
mv "$f.tmp" "`echo $f | tr "[:lower:]" "[:upper:]"`";
done
我试图通过这样的路径
for f in path_to_dir* ...
但它做了什么,它只是以某种方式制作了一个目录 .tmp
我会做类似的事情:
该脚本被称为:
我怀疑你做了类似的事情,
for f in /path/to/dir*
而不是/path/to/dir/*
. 前者将查找/path/to
名称以开头的文件和目录,dir
而后者将遍历目录的内容。无论如何,这对你没有帮助,因为
tr
你使用的命令会改变一切,包括/path/to/dir
大写,让你留下/PATH/TO/DIR
不存在的东西。好消息是你可以用一种更简单的方式来做到这一点。如果您使用的是 bash,则可以使用
${var^^}
将变量的内容设为大写。所以你可以这样做:或者,为了避免两次输入目录名称,您可以将其保存在变量中:
但是,这是
cd
进入目标目录并在那里工作更简单和更清晰的情况之一:或者,为避免进入新目录,请在子 shell 中运行循环:
最后,您还可以使用
perl-rename
(在 Ubuntu 上称为rename
并且可使用 安装sudo apt install rename
)来完成所有这些操作:-n
制造商只是打印出rename
它不做它会做什么。如果您对它的工作感到满意,请再次运行它而不-n
实际重命名文件。