Rename
文件名的動態修剪
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
留給讀者作為練習。