如何使用终端将当前目录下的所有文件大写?

问题描述 投票:0回答:2

我正在尝试使用以下命令将当前工作目录中的所有文件大写:

ls | awk '{system("svn mv " $0 " " toupper(substr($0,1,1)) substr($0,2))}'

但是,我收到以下错误消息:

svn: '.' is not a working copy
svn: '.' is not a working copy
svn: '.' is not a working copy
svn: '.' is not a working copy

我使用的是 osx。能否请你帮忙?提前致谢。

macos svn command-line terminal
2个回答
0
投票

你不应该在脚本中使用 ls , ls 用于人类数据的呈现(并且会让你的脚本惊讶于名称中的空格,特殊文件夹,如 . 和 .. 像这里等等......),尝试改为:

for f in *;do;svn mv $f $(echo $f| tr '[a-z]' '[A-Z]');done

请参阅此处了解其他大小写转换替代方案,我使用了 tr,因为这里不需要 awk。


0
投票

使用 cd 命令导航到包含要大写的文件的目录。例如:

cd path/to/directory

运行以下命令,将当前目录下的所有文件名大写:

for f in *; do mv "$f" "$(tr '[:lower:]' '[:upper:]' <<< "${f:0:1}")${f:1}"; done

此命令使用循环迭代目录中的每个文件 (*),并使用 mv 命令对其进行重命名。 ${f:0:1} 提取每个文件名的第一个字符(然后使用 tr 将其转换为大写),${f:1} 提取文件名的其余部分。结果是大写的文件名。

运行此命令后,当前目录中的所有文件的名称都应大写。

© www.soinside.com 2019 - 2024. All rights reserved.