使用shell批量修改文件名

一、基本概念

在shell中使用mv命令可以用來對單個文件進行修改操作,但是當我們需要批量對文件進行修改時就需要使用循環結構和正則表達式等來實現。在這裡我們先來介紹一下基本的概念及命令。

1. mv命令

mv [option] source_file target_file

該命令用來修改文件名或文件所在路徑,其中option可以包括四個參數,分別為-i, -f, -u和-t。-i表示交互式,-f表示不提示直接覆蓋,-u表示只有源文件比目標文件新或目標文件不存在時才會修改,-t表示指定目標文件夾。

2. for循環

for var in $list    #注意空格
do
    command   #在此處執行指定操作
done

for循環常用來對列表中的每個元素進行操作,其中var為變量名,$list表示需要操作的列表,command表示需要執行的操作。

3. 正則表達式

正則表達式是一種用來匹配文本的表達式,它包含了特定的字符和文本結構,常用的有^, $, ., *, [], {}等符號。例如 ^ 和 $ 用來匹配字符串的起始和結束位置,. 表示任意一個字符,* 表示匹配前面的字符 0 次或多次,[] 表示匹配括號中的任意一個字符,{} 表示匹配前面的字符固定次數。

二、批量修改文件名的常用方法

1. 根據文件名中的某些字符進行修改

對於需要根據文件名中的某些字符進行修改的情況,我們可以使用for循環和正則表達式來實現:

#!/bin/bash
for file in *.txt
do
    mv $file ${file/txt/md}   #把txt替換為md
done

上述代碼表示將當前文件夾中所有txt文件的後綴名修改為md。

2. 在文件名中添加字符

有時我們需要在文件名中添加一些特定的字符,例如在文件名前後添加字符串或者添加日期信息:

#!/bin/bash
for file in *.txt
do
    mv $file $(date +%Y%m%d)_$file   #在文件名前面添加當前日期
done

上述代碼表示將當前文件夾下所有txt文件的文件名前面添加當前日期。

3. 數字序列或隨機數

有時我們需要給文件名添加數字序列或者隨機數,這時我們可以使用seq或者$RANDOM變量實現:

#!/bin/bash
num=0
for file in *.png
do
    num=$(($num+1))
    mv $file image_${num}.png   #給文件名添加數字序列
done

上述代碼表示將當前文件夾下所有png文件的文件名修改為image_1.png, image_2.png等。

#!/bin/bash
for file in *.png
do
    mv $file image_${RANDOM}.png   #給文件名添加隨機數
done

上述代碼表示將當前文件夾下所有png文件的文件名修改為image_4235.png, image_213.png等隨機數。

三、實用技巧

1. 去除文件名中的特定字符

有時我們需要去除文件名中的某些字符,例如特定的前綴或後綴:

#!/bin/bash
for file in *-user.txt
do
    mv $file ${file/-user/}   #去除特定的後綴
done

上述代碼表示將當前文件夾下所有以-user結尾的文件名中的-user去掉。

2. 批量修改文件夾中的文件名

有時我們需要對某個文件夾中的文件名進行批量修改,這時我們只需要在mv命令中加上目標的文件夾路徑:

#!/bin/bash
for file in ~/Documents/*.doc
do
    mv $file ~/Documents/new_files/${file##*/}   #修改文件夾路徑並保留原文件名
done

上述代碼表示將Documents文件夾下所有doc文件的文件名移到Documents/new_files文件夾下。

3. 對子文件夾中的文件進行批量修改

有時我們需要對某個文件夾中的子文件夾中的所有文件進行修改操作,這時我們可以使用遞歸結構來實現:

#!/bin/bash
function renameFiles() {
    for file in $1/*   #遞歸讀取子文件夾
    do
        if [ -d "$file" ]; then   #判斷是否為目錄
            renameFiles "$file"
        else
            mv "$file" "${file/mp4/flv}"   #修改文件名
        fi
    done
}
renameFiles ~/Movies   #從Movies文件夾開始遞歸

上述代碼表示將Movies文件夾及其子文件夾下所有mp4文件的文件名修改為flv。

四、總結

批量修改文件名在我們日常的工作中經常使用,使用shell腳本可以高效地實現這些操作。本文針對常見的批量操作情形進行了詳細的介紹,並給出了對應的代碼示例。通過學習本文,你可以更加熟練地運用shell腳本進行文件名的批量修改操作。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/233625.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-11 17:10
下一篇 2024-12-11 17:11

相關推薦

  • Shell腳本與Python腳本的區別

    本文將從多個方面對Shell腳本與Python腳本的區別做詳細的闡述。 一、語法差異 Shell腳本和Python腳本的語法存在明顯差異。 Shell腳本是一種基於字符命令行的語言…

    編程 2025-04-29
  • Java批量執行SQL時Communications Link Failure Socket is Closed問題解決辦法

    對於Java開發人員來說,批量執行SQL是一個經常會遇到的問題。但是,有時候我們會遇到“Communications link failure socket is closed”這…

    編程 2025-04-28
  • Shell嵌入式介紹及應用

    本文將介紹Shell嵌入式的概念、特點和應用,並針對嵌入式系統開發中的一些問題,給出相應的解決方案。 一、Shell嵌入式概念 Shell嵌入式是一種將Shell(命令行解釋器)嵌…

    編程 2025-04-28
  • Python Shell保存PY文件的方法

    Python Shell是一種交互式編程環境,它能夠快速驗證代碼實現。有時,為了將代碼保存到文件中,我們需要了解如何在Python Shell中保存Python文件。本文將從多個方…

    編程 2025-04-27
  • PowerDesigner批量修改屬性

    本文將教您如何使用PowerDesigner批量修改實體、關係等對象屬性。 一、選擇要修改的對象 首先需要打開PowerDesigner,並選擇要修改屬性的對象。可以通過以下兩種方…

    編程 2025-04-27
  • Shell和Python哪個難學

    Python比Shell更難學習。 一、語法複雜度 Shell腳本是一種受眾較為廣泛的編程語言,它的語法相對於Python來說要簡單很多,很多基本的語句都只需要幾個字符就能表示出來…

    編程 2025-04-27
  • Python批量導入數據庫

    本文將介紹Python中如何批量導入數據庫。首先,對於數據分析和挖掘領域,數據庫中批量導入數據是一個必不可少的過程。這種高效的導入方式可以極大地提高數據挖掘、機器學習等任務的效率。…

    編程 2025-04-27
  • 如何批量下載某博主全部微博相冊

    這篇文章將教大家如何通過Python代碼批量下載某博主全部微博相冊。 一、獲取微博相冊鏈接 首先,我們需要獲取到某博主的所有微博相冊鏈接。可以通過以下代碼獲取到某博主的首頁鏈接: …

    編程 2025-04-27
  • Python批量爬取網頁內容

    Python是當前最流行的編程語言之一,其在數據處理、自動化任務、網絡爬蟲等場景下都有廣泛應用。本文將介紹如何使用Python批量爬取網頁內容,方便獲取大量有用的數據。 一、安裝所…

    編程 2025-04-27
  • Shell對比字符串

    本文將從多個方面介紹Shell對比字符串的方法和技巧。 一、基本操作 Shell的對比字符串操作主要使用test或者[ ]操作符,其中test是[ ]的等價形式。可以使用man t…

    編程 2025-04-27

發表回復

登錄後才能評論