ファイル名を動的にトリミングする

ファイル名を動的にトリミングする

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

よろしくお願いします!

ベストアンサー1

あなたの問題は次のように非常に似ています。これ、私の答えは部分的にその質問に対する答えに基づいています。

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

問題ドメインをすべてのファイルのセットとして定義したので、最後からファイルを削除して*.csvループを開始します。.csv次に、ランダムな文字列とドットが続く最長の接頭辞を削除します.。最後にprintf残ったデフォルトのファイル名と再添付.csv

コマンドを実行する実際のメカニズムは、mv読者に練習の問題として残します。

おすすめ記事