一、基本概念
在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