[英]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
在 Bash 4 中,您可以直接使用參數擴展來將單詞中的每個字母 ( ^^
) 或僅首字母 ( ^
) 大寫。
for f in *; do
mv -- "$f" "${f^}"
done
您可以使用模式來形成更復雜的案例修改。
但是對於你的具體問題,你是不是太努力了? 當“主題”出現在文件名的開頭時,只需將“主題”一詞替換為“主題”。
for f in theme*; do
mv "$f" "Theme${f#theme}"
done
您的第一次嘗試很接近,但tr
對其輸入中的每個字符進行操作。
您要么需要使用可以對單個字符進行操作的sed
東西,要么將tr
限制為只能看到第一個字符。
for f in * ; do
mv -- "$f" "$(tr [:lower:] [:upper:] <<< "${f:0:1}")${f:1}"
done
使用Shell Parameter Expansion僅給出tr
文件名的第一個字符,然后擴展文件名的其余部分。
我無法在 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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.