Linux将文件重命名为大写

时间:2013-11-27 21:39:18

标签: linux bash ubuntu

我有大量x00000.jpgX00000.jpgxx00000.jpg格式的文件。

如何重命名这些文件,使它们全部为大写,忽略名称的数字部分?

7 个答案:

答案 0 :(得分:21)

for f in * ; do mv -- "$f" "$(tr [:lower:] [:upper:] <<< "$f")" ; done

答案 1 :(得分:12)

您无法仅从Bash重命名文件,因为Bash没有任何用于重命名文件的内置命令。你必须至少使用一个外部命令。

如果允许Perl:

perl -e 'for(@ARGV){rename$_,uc}' *.jpg

如果允许Python:

python -c 'import os, sys; [os.rename(a, a.upper()) for a in sys.argv[1:]]' *.jpg

如果您有数千或更多文件,上面的解决方案很快,下面的解决方案明显变慢。

如果允许AWK,lsmv

# Insecure if the filenames contain an apostrophe or newline!
eval "$(ls -- *.jpg | awk '{print"mv -- \x27"$0"\x27 \x27"toupper($0)"\x27"}')"

如果您有大量文件,则上述解决方案不起作用,因为*.jpg扩展为太长的参数列表(错误:参数列表太长)。

如果允许trmv,请参阅damienfrancois的回答。

如果允许mv

for file in *; do mv -- "$file" "${file^^}"; done

请注意,这些会在最后将.jpg重命名为.JPG,但您可以修改它们以避免这种情况。

答案 2 :(得分:8)

bash shell具有将变量名称转换为全部大写的语法。

for file in * ; do      # or *.jpg, or x*.jpg, or whatever
    mv $file ${file^^}
done

我认为这可能是一个相当新的功能,因此请首先验证您的bash版本是否实现了它。为避免错误,请在mv替换echo mv之后尝试,以确保它能够满足您的需求。

此功能的文档为here,或键入info bash并搜索“upper”。

如果目标文件已存在(例如,如果x00000.jpgX00000.JPG已经存在),您应该决定该怎么做,除非您确定它不是问题。要检测此类名称冲突,您可以尝试:

ls *.txt | tr '[a-z]' '[A-Z]' | sort | uniq -c | sort -n

并查找不以1开头的任何行。

答案 3 :(得分:7)

结合以前的答案可以产生:

for file in * ; do            # or *.jpg, or x*.jpg, or whatever
   basename=$(tr '[:lower:]' '[:upper:]' <<< "${file%.*}")
   newname="$basename.${file#*.}"
   mv "$file" "$newname"
done

答案 4 :(得分:3)

使用tr:

f="x00000.jpg"
n="${f%.*}"
n=$(tr '[:lower:]' '[:upper:]' <<< "$n")
f="$n.${f#*.}"
echo "$f"

<强>输出:

X00000.jpg

答案 5 :(得分:2)

rename

最简单的方法可能是rename 'y/a-z/A-Z/' * 多个文件。要将小写字母转换为高位,您可以

const mysql = require('mysql');
const express = require('express');
const app = express();
const connection = mysql.createConnection({
    host: 'localhost',
    user: 'me',
    password: 'secret',
    database: 'my_db'
});

connection.connect();

app.get('/', (req, res) => {
    connection.query(`SELECT * FROM table`, (error, data) => {
        if(error) {
            console.log(error)
        }else{
            res.json(data)
        } 
    });
});

app.post('/update/user/:id?', (req, res) => {
    const id = req.params.id;
    const username = req.body.username;
    connection.query(`UPDATE MyGuests SET username='${username}' WHERE id=${id}`, (error, data) => {
        if(error) {
            console.log(error)
        }else{
            res.json(data)
        } 
    });
});

参考

答案 6 :(得分:0)

如果只想重命名文件/目录,那么您可以使用rnm

rnm -rs '/./\C/g' -fo -dp -1 *

说明:

  1. -rs:替换字符串。 /./\C/g.(正则表达式)的所有匹配替换为大写。
  2. -fo:仅文件模式
  3. -dp:目录深度(-1表示无限制)。
  4. 可以找到更多示例here

相关问题