簡體   English   中英

使用 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

在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM