Rename

文件名的動態修剪

  • April 13, 2021

Linux新手在這裡。

我正在建構我的第一個 bash 腳本,我已經編寫了程式碼來截斷和清理 csv 文件名,但是它非常靜態,我必須手動計算我希望截斷的字元。我想動態刪除文件的前綴。我見過很多例子,人們保留前綴,但實際上我想保留最後 7 個字元(或更多……包括文件副檔名。)

範例如下。

# Sample of filenames in a folder
SOLO_PAL3.xyz.ino.IVC.csv   ->  renamed to   IVC.csv
SOLO_PAL3.xyz.ino.EVC.csv   ->  renamed to   EVC.csv
SOLO_PAL3.xyz.ino.VVC.csv   ->  renamed to   VVC.csv
SOLO_PAL3.xyz.ino.WVC.csv   ->  renamed to   WVC.csv

文件名截斷 - 雖然這有效,但 cut -c19- 目前需要手動更新特定文件長度的整數。我在這個例子中留下了迴聲,所以我可以在執行之前看到變化。

for file in ???*;      
   do echo mv $file `echo $file | cut -c19-`; 
   # Something equivalent to RIGHT($file,$file.length-($file.length)-7))?
done

提前謝謝了!

您的問題與此問題非常相似,我的回答部分基於對該問題的回答。

for f in *.csv
do
 newf="${f%.csv}"
 newf="${newf##*.}"
 printf '%s.csv\n' "${newf}"
done

由於您將問題域定義為所有*.csv文件的集合,因此此循環首先.csv從文件名的末尾刪除 。接下來,它刪除由任何字元串後跟一個點組成的最長可能前綴.。最後,它printf是剩餘的基本文件名並重新附加.csv.

執行命令的實際機制mv留給讀者作為練習。

引用自:https://unix.stackexchange.com/questions/644790