1. 程式人生 > >Ubuntu用rename命令批量重新命名檔案

Ubuntu用rename命令批量重新命名檔案

摘要:   本文介紹rename命令完成重新命名批量檔案語法,介紹了rename用到的Perl的替換和轉化形式,並給出常用正規表示式。最後給出幾個例項。   偶爾會遇到需要重新命名批量檔案,最典型的例子就是數碼相機的相片,在Ubuntu可以用工具Purrr或者PerfixSuffix實現該功能,但重新命名批量檔案並不常用,為了偶爾的一次操作,安裝工具(可能通過Ubuntu Software Center或者sudo apt-getinstall安裝),加之圖形化介面操作也比較費時間。事實上,rename命令就可以出色完成該工作。 一、rename命令    Linux的 rename命令有兩個版本(C語言和Perl語言),早期的Linux發行版基本上使用的是C語言版本,現在系統幾乎都是Perl語言版本了(支援正則處理,功能更強大)[1]。可以通過命令manrename開啟rename幫助文件檢視版本,如果第一行內容如下,則是Perl語言版本。
  1. RENAME(1)    Perl Programmers ReferenceGuide            RENAME(1)
  鑑於Perl語言版本是主流,本文只介紹該版本下rename的用法,C語言版本操作見[1]。Perl語言版本的rename命令格式如下:
  1. rename [ -v ] [ -n ] [-f ] perlexpr [ files ]
-v(verbose)列印被成功重新命名的檔案 -n(no-act)只是顯示將被重新命名的檔案,而不重新命名(重新命名之前可以用-n確認         需要重新命名的檔案) -f(force)覆蓋已經存在的檔案
perlexprPerl語言格式的正則表示式 files需要被替換的檔案(比如*.c、*.h),如果沒給出檔名,將從標準輸入讀
  先舉個例子來感受下,比如將當前目錄下所有*.nc檔案中Sam3替換成Stm32,命令如下:
  1. rename -n's/Sam3/Stm32/' *.nc  /*確認需要重新命名的檔案*/
  2. rename -v 's/Sam3/Stm32/' *.nc  /*執行修改,並列出已重新命名的檔案*/
  整個命令的重點在於Perl語言正則表示式,下一部分將予以較詳細的介紹。 二、Perl正則表示式 2.1三種形式[2]
匹配:m// (可以省略m,直接寫成/regexp/)
替換:s///  轉化:tr///
  博文[3]給出了8種模式,rename命令常用到替換和轉化兩種(用匹配也沒意義)。轉換跟替換不同,替換是將replacement整個字串替換pattern字串,而轉換則是用replacement逐個字元替換pattern逐個字元,結果依賴於replacement與pattern字元個數(見下述分析)。 (1)替換 替換表達方式如下[3],還有一系列引數,貌似不怎麼用得著。
  1. s/PATTERN/REPLACEMENT/egimosx
e Evaluate the rightside as an expression. g Match globally, i.e.all occurrences. i Case-insensitivepattern matching. m Treat string asmultiple lines. o Only compile patternonce, even if variables within itchange. s Treat string as singleline. x Use extended regularexpressions
(2)轉化 轉化有兩種等價表達方式,如下:
  1. tr/SEARCHLIST/REPLACEMENTLIST/cds
  2. y/SEARCHLIST/REPLACEMENTLIST/cds
cComplement theSEARCHLIST. d Delete found butunreplaced characters. sSquash duplicate replacedcharacters.
  轉化同替換不同,用REPLACEMENTLIST逐個字元替換SEARCHLIST逐個字元,比如'tr/Sam/Stm/',用S替代S,t替代a,m替代m。結果依賴於兩者字元長短,下面以檔名FastSpiSam3C.nc為例進行說明:
  1. [email protected]:~$rename -n 'tr/Sam3/Stm/' FastSpiSam3C.nc /*替換字元短,用最後一個字元m替換3*/
  2. FastSpiSam3C.nc renamed asFtstSpiStmmC.nc
  3. [email protected]:~$rename -n 'tr/Sam3/Stm32/' FastSpiSam3C.nc /*替換字元長,多出字元被忽略*/
  4. FastSpiSam3C.nc renamed asFtstSpiStm3C.nc
  引數c、d、s把我搞懵了,本想通過一系列操作,總結規律,結果徒勞。 2.2 常用模式 正則表示式中的一些常用模式pattern[2]:
x? 匹配 0 次或一次 x 字串 x* 匹配 0 次或多次 x 字串,但匹配可能的最少次數 x+ 匹配 1 次或多次 x 字串,但匹配可能的最少次數 .* 匹配 0 次或一次的任何字元 .+ 匹配 1 次或多次的任何字元 {m} 匹配剛好是 m 個 的指定字串 {m,n}匹配在 m個 以上 n個 以下的指定字串 {m,}匹配 m個 以上 的指定字串 [] 匹配符合 [] 內的字元 [^] 匹配不符合 [] 內的字元 [0-9]匹配所有數字字元 [a-z]匹配所有小寫字母字元 [^0-9]匹配所有非數字字元 [^a-z]匹配所有非小寫字母字元 ^  匹配字元開頭的字元 $  匹配字元結尾的字元 \d  匹配一個數字的字元,和 [0-9]語法一樣 \d+ 匹配多個數字字串,和 [0-9]+ 語法一樣 \D  非數字,其他同 \d \D+ 非數字,其他同 \d+ \w  英文字母或數字的字串,和 [a-zA-Z0-9] 語法一樣 \w+ 和 [a-zA-Z0-9]+ 語法一樣 \W  非英文字母或數字的字串,和 [^a-zA-Z0-9] 語法一樣 \W+  和 [^a-zA-Z0-9]+ 語法一樣 \s   空格,和 [\n\t\r\f]語法一樣 \s+  和 [\n\t\r\f]+ 一樣 \S   非空格,和 [^\n\t\r\f]語法一樣 \S+  和 [^\n\t\r\f]+ 語法一樣 \b  匹配以英文字母,數字為邊界的字串 \B  匹配不以英文字母,數值為邊界的字串 a|b|c匹配符合a字元 或是b字元 或是c字元 的字串 abc  匹配含有 abc 的字串
三、例項 3.1 將所有*.nc檔案中Sam3替換成Stm32
  1. rename -'s/Sam3/Stm32/' *.nc  /*執行修改,並列出已重新命名的檔案*/
3.2去掉檔案字尾名(比如去掉.bak)
  1. rename 's/\.bak$//' *.bak
3.3將檔名改為小寫
  1. rename 'y/A-Z/a-z/' *
3.4去掉檔名的空格
  1. rename 's/[]+//g' *
3.5檔案開頭加入字串(比如jelline)
  1. rename 's/^/jelline/' *
3.6檔案末尾加入字串(比如jelline)
  1. rename 's/$/jelline/' *

相關推薦

Ubunturename命令批量重新命名檔案

摘要:   本文介紹rename命令完成重新命名批量檔案語法,介紹了rename用到的Perl的替換和轉化形式,並給出常用正規表示式。最後給出幾個例項。   偶爾會遇到需要重新命名批量檔案,最典型的例子就是數碼相機的相片,在Ubuntu可以用工具Purrr或者PerfixSuffix實現該功能,但重新命名

利用Excel和ren命令批量重新命名檔案技巧

要求:將下面的檔案全部重新命名為1.jpg,2.jpg…… 解決方法: 1.Win+R 開啟cmd命令列,依次輸入一下命令 【注:】dir /b>a.xls 將當前目錄下的檔案目錄

Mac 終端 命令 批量重新命名檔案,並修改後綴

新建一個指令碼檔案:reanme.sh 開啟檔案,使用以下程式碼: for i in ./1/*/*.jpg; do mv "$i" "${i%.jpg}.png"; done 作用:

Windows下指令碼批量重新命名檔案

1. 我的效果: 2. reference reference:https://blog.csdn.net/txz317/article/details/52326041 在Windows下可以用指令碼批量重新命名檔案,且可以將檔名按指定的字串格式命名,並按序號遞

Windows下的通過命令批量重新命名檔案

        今天在工作時遇到了一個情況,通過高速掃描器掃描的檔案是以圖片的形式儲存到本地硬碟上的,但是掃描器給圖片命的名就很混亂,並不是我想要的。作為一個強迫症,於是就想到了手動把這些名字改過來。但是這一整個資料夾6、700張圖片,一個一個地F2去重新命名工作了也是蠻嚇人

Linux 批量重新命名檔案的方法

1.使用rename命令 SYNOPSIS rename from to file... from 表示需要替換或者處理的字元,比如檔案的副檔名,檔名. to 表示對from處理之後的結果。 file 表示目標檔案。 [[email protected] tmp]# ls hello_10_201

linux下批量重新命名檔案

假設資料夾Data裡有幾個資料資料夾, 每個資料資料夾內有多個數據檔案,該檔名稱格式為: 2014.143.20.49.21.0000.YN.BAS.00.BHE.M.SAC 現想要將這些檔名稱改為BAS.E.SAC, 即取原檔名的幾列重新命名,方法如下: #!/bin/bash #將資料檔

python批量重新命名檔案

給三千多張圖片重新命名,只需如下幾行程式碼。cool import os path = "E:/memery/陪你一起成長/" # 獲取該目錄下所有檔案,存入列表中 f = os.listdir(pat

Linux下Shell指令碼實現批量重新命名資料夾,批量重新命名檔案(讓原本繁重的工作變得簡單)

最近接了個專案,具體做什麼都不說了,其中有個工作就是批量更改資料夾,然後批量更改資料夾下的檔名字,一會兒先貼程式碼,再詳細解釋步驟。 下面是我的簡化版的目錄結構,實際上有上百個。 project dir1 dir1.py dir2

【Windows小技巧】批量重新命名檔案

2016/12/14更新 注:如果檔名包含空格,命令應寫成ren "s0 (1).gif" s001.gif,簡而言之,就是加上雙引號!!!原因:系統將s0和(1).gif認為是兩個引數,再加上後面的s001.gif一共三個引數,會認為你語法不正確。 批量重

linux下rename用法--批量重新命名

原文地址:https://www.cnblogs.com/hester/p/5615871.html Linux的rename 命令有兩個版本,一個是C語言版本的,一個是Perl語言版本的,早期的Linux發行版基本上使用的是C語言版本的,現在已經很難見到C語言版本的了, 由於歷史原因,在Perl語言大紅大

按數字遞增批量重新命名檔案的批處理

按00001這類格式遞增批量重新命名ren.bat:@echo off SETLOCAL ENABLEDELAYEDEXPANSION set /A num=0 FOR /F "tokens=*" %%i in ('dir /A-D /B /OD /TC') do (     IF NOT "%%i"=="%

Windows 批量重新命名檔案(支援正則表示式)

 今天整理了一批檔案,命名有點上亂,所以想批量修改一下。  在網上找了一工具,叫Ant Renamer,相當不錯。主介面如下:  操作步驟很簡單:  1.新增檔案或資料夾,支援自動遞所有子目錄。  2.操作(在這裡設定重新命名的引數)    3.然後點選“開始”即可,左

powershell批量重新命名檔案

#批量重新命名 #去掉名稱中"第"之前的字元 Get-ChildItem -Path "D:\path" -Filter *.* | ForEach-Object{ #echo $_.Nam

php批量重新命名檔案

<?php /** * 1) 通過讀取csv文件(product_all.csv)中的產品編號獲取目錄1和目錄2下圖片對應編號的目錄 * (目錄1下圖片路徑:../imagezoom/id_1/image_xxx.jpg, * 目錄2下圖片路徑:../show

lua批量重新命名檔案

local s = io.popen("dir F:\\headicon /b/s") local filelist = s:read("*all") local start_pos = 0 local count = 100 while true do _,end

JAVA中使用File類批量重新命名檔案

今天上網下載了很多東西,可是每個檔案都有那個網站的網址,正好在學習JAVA,無聊之中寫段程式碼搞定這個問題,本文沒有很大的技術含量,也就使用了一個File類,本人才疏學淺,請大家多多包涵! 以下是程式碼: package test.java.com; import java.

Windows 批量重新命名 檔案

最簡單的方法是用 PowerShell,需要 Vista 以上作業系統。XP 的話自己寫個批處理解決吧,用那麼古老的系統自然享受不到福利了。 開啟 PowerShell,cd 進入想要轉換的目錄,輸入: Dir | Rename-Item –NewName { $_.nam

windows xp 下 批量重新命名檔案

步驟: 首先,選中要重新命名的所有檔案。 然後,右擊第一個檔案選擇重新命名,例如重新命名為name.txt。 最後,回車那麼其餘檔案自動重新命名為name  (1).txt,name  (2).txt,name  (3).txt......... 注意: @1、如果想讓第一

rename命令批量重新命名

本文為轉載文章,轉發自 https://blog.csdn.net/GGxiaobai/article/details/53507454 早期版本的rename是C語言版本,如今新的Ubuntu中採用的都是perl版本,功能更加強大 Usage:rename [-v] [-n] [-f] perle