⑴ shell批量修改文件名(筆記)
在工作中,利用 shell 批量修改文件名是常見操作,如 Nginx 日誌切割時處理大量文件。以下步驟演示如何使用 shell 命令實現批量文件名修改。
首先,創建測試文件:
mkdir sub_str
[root@localhost sub_str]# touch chaochao_{1..5}_finished.jpg
[root@localhost sub_str]# touch chaochao_{1..5}_finished.png
這將生成 chaochao_1-5_finished.jpg 和 chaochao_1-5_finished.png 文件。
目標:去除所有文件的 '_finished' 後綴。
方法一:單個文件替換:
例如:mv chaochao_1_finished.jpg chaochao_1.jpg
此操作完成單個文件修改。
方法二:使用變數和子串功能:
定義變數 f:
f = chaochao_1_finished.jpg
echo ${f//_finished/}
註:全局替換 '_finished' 後綴為空。
方法三:結合思路一與二,利用反引號:
mv $f `echo ${f//_finished/}`
註:此命令修改文件名。
使用 for 語句批量處理文件名修改:
for file_name in `ls *fin*jpg`; do mv $file_name `echo ${file_name//_finished/}`; done
for 語句和 ls 命令結合,查找所有 .jpg 文件,使用正則表達式過濾出包含 '_finished' 的文件。然後,使用 mv 命令替換後綴。
理解 for 語句和正則表達式的使用有助於高效處理文件名修改任務。此過程涉及單個文件修改、使用變數和子串功能,以及利用 for 語句和反引號執行批量操作。
最後,執行此腳本完成所有目標文件名的批量修改。
⑵ 用shell命令對文件重命名
shell腳本實現文件改名小操作, 在此做一記錄.
#!/bin/bash#將數據文件.SAC名改為'<sta>.[N/E/Z].SAC'#例如2014.143.20.49.21.0000.YN.BAS.00.BHE.M.SAC改為BAS.E.SACcd ../Datafor FILE in ./* do cd ./$FILE ls#先ls,顯示給文件下的所有文件名,對這些文件名使用awk命令,print出相應的mv *** *** 交由bash處理,給文件重命名.ls *.SAC | awk -F"." '{print "mv "$0" "$8"."$10"."$12}' | bash rename "s/BH//" * #將BH替換為"",即刪除BH# rename 's/^/filt./' *.SAC #增加前綴"filt."# rename 's/filt.//' * #刪除前綴"filt." cd .. done
⑶ SHELL腳本修改文件名移動到指定文件夾
簡單的寫了一次, 思路如下,
腳本需要放在 test文件夾下
主要是用變數賦值分割文件名, 按照-的前後來分割
#################################
#!/bin/bash
mkdir 'ralph'
mkdir 'bessie'
for name in *.bb
do
newName=${name#*-}
q=${name%-*}
newName=${newName%.bb} #加上這句話就把.bb 刪了
if [ $q = "ralph" ]; then
mv $name "ralph/$newName"
else
mv $name "bessie/$newName"
fi
done
⑷ linux下怎麼通過shell批量修改文件名後綴
這個問題還是比較簡單的。我們通過對變數的字元串替換就能實現。
抽風了,貼不了代碼了。你參考一下咯
# linuxprobe.com
# 第4章 Vim編輯器與Shell命令腳本。
readdirectory;
if[-d$directory]
then
pushd$directory;
#HandleRenameProcess
forfnamein`ls*.txt`
do
mv$fname${fname%.*}.doc;
done
fi