使用 Bash 将目录中的所有文件大写
Capitalize all files in a directory using Bash
我有一个名为 "Theme_1" 的目录,我想将所有以 "theme" 开头的文件名大写。每个文件名的第一个字母都是小写的,我希望它是大写的。
我试过了,但是文件名中的所有字母都是大写的,这不是我想要的。
for f in * ; do mv -- "$f" "$(tr [:lower:] [:upper:] <<< "$f")" ; done
这个我也试过了,但是不行:
mv theme*.jpg Theme*.jpg
您的第一次尝试很接近,但是 tr
对其输入中的每个字符进行操作。
您要么需要使用像 sed
这样可以对单个字符进行操作的东西,要么将 tr
限制为只能看到第一个字符。
for f in * ; do
mv -- "$f" "$(tr [:lower:] [:upper:] <<< "${f:0:1}")${f:1}"
done
使用 Shell Parameter Expansion 只给出 tr
文件名的第一个字符,然后展开文件名的其余部分。
在Bash 4中你可以直接使用parameter expansion来大写一个单词中的每个字母(^^
)或者只是第一个字母(^
)。
for f in *; do
mv -- "$f" "${f^}"
done
您可以使用模式来形成更复杂的大小写修改。
但是对于你的具体问题,你是不是太辛苦了?只需将出现在文件名开头的 "theme" 替换为 "Theme"。
for f in theme*; do
mv "$f" "Theme${f#theme}"
done
我无法在 Bash 中得到我想要的东西。所以我花了 2 分钟让这个在 PHP 中工作。这是为正在寻找解决方案并且碰巧在他们的系统上有 PHP 的未来 google 员工准备的。
<?php
foreach(glob(__DIR__.'/*') as $filename) {
if($filename === '.' || $filename === '..') { continue; }
// To only capitalize the first letter of the file
$new_filename = ucfirst(basename($filename));
// To capitalize each word in the filename
//$new_filename = ucwords(basename($filename));
echo __DIR__.'/'.$new_filename."\n";
rename($filename, __DIR__.'/'.$new_filename);
}
我有一个名为 "Theme_1" 的目录,我想将所有以 "theme" 开头的文件名大写。每个文件名的第一个字母都是小写的,我希望它是大写的。
我试过了,但是文件名中的所有字母都是大写的,这不是我想要的。
for f in * ; do mv -- "$f" "$(tr [:lower:] [:upper:] <<< "$f")" ; done
这个我也试过了,但是不行:
mv theme*.jpg Theme*.jpg
您的第一次尝试很接近,但是 tr
对其输入中的每个字符进行操作。
您要么需要使用像 sed
这样可以对单个字符进行操作的东西,要么将 tr
限制为只能看到第一个字符。
for f in * ; do
mv -- "$f" "$(tr [:lower:] [:upper:] <<< "${f:0:1}")${f:1}"
done
使用 Shell Parameter Expansion 只给出 tr
文件名的第一个字符,然后展开文件名的其余部分。
在Bash 4中你可以直接使用parameter expansion来大写一个单词中的每个字母(^^
)或者只是第一个字母(^
)。
for f in *; do
mv -- "$f" "${f^}"
done
您可以使用模式来形成更复杂的大小写修改。
但是对于你的具体问题,你是不是太辛苦了?只需将出现在文件名开头的 "theme" 替换为 "Theme"。
for f in theme*; do
mv "$f" "Theme${f#theme}"
done
我无法在 Bash 中得到我想要的东西。所以我花了 2 分钟让这个在 PHP 中工作。这是为正在寻找解决方案并且碰巧在他们的系统上有 PHP 的未来 google 员工准备的。
<?php
foreach(glob(__DIR__.'/*') as $filename) {
if($filename === '.' || $filename === '..') { continue; }
// To only capitalize the first letter of the file
$new_filename = ucfirst(basename($filename));
// To capitalize each word in the filename
//$new_filename = ucwords(basename($filename));
echo __DIR__.'/'.$new_filename."\n";
rename($filename, __DIR__.'/'.$new_filename);
}