最後にタイムスタンプなしでファイル名を変更する方法

最後にタイムスタンプなしでファイル名を変更する方法

このファイルの束の名前を次のように変更したいと思います。

TEST_API_CICD_03Sep2019_09:12:19.json
TEST_API_CICD_03Sep2019_09:12:20.json

これに関して

TEST_API_CICD.json
TEST_API_CICD.json

ファイル名の長さが一定ではありません。

答え1

prename私はPerl 5.1でインストールされた強力なPerl正規表現プログラムを使ってこの質問に答えます。

ファイルを含むディレクトリで次のコマンドを実行します。

prename -v 's/_\d\d[A-Za-z]+\d\d\d\d_\d\d:\d\d:\d\d((\.[^.]*)?)$/$1/g' *

あなたは変わるかもしれません* コマンドの終わりに名前を変更するファイルのリストに移動します(一部の名前のみを変更したい場合)。

翻訳する

「」を削除して、現在のディレクトリのすべてのファイル名を変更します。下線 - 次の2桁 - 次の1つ以上の英字 - 次の4桁 - 次の下線 - 次の2桁 - 次のコロン - 次の2桁 - 次の次のコロン - 次の2桁 -「ファイル拡張子の前(または拡張子がない場合はファイル名の終わり)に来ます。

ノート

  • 実際に名前を変更せずに最初に名前を変更する方法については、-vパラメータをに変更できます。-n
  • あなたの例が同じディレクトリにある場合、ファイル名の競合が発生します。(下記参照)
  • 新しい名前が変更されたファイル名が別の既存のファイル、または以前に名前が変更されたファイル名と競合している場合は、警告が印刷され、prenameそのファイルは名前が変更されていません。 (この問題の影響を受けない他のファイルの名前は変更され続けます。)
  • ファイル名の末尾から通常の「日付」を削除するコマンドはありません。考慮すべき日付と区切り文字の形式が多すぎます。名前を変更するときに間違った日付形式を適用すると、混乱を招く可能性があります。私が提供したコマンドは、例に示されているファイル名の日付区切り文字、日付形式、および日付拡張区切り文字でのみ機能します。バラより翻訳する上記の具体的な内容。
  • 私はこれをDebian GNU / Linux 7.0 "Wheezy" i386(Perl 5.14.2を使用)でテストしました。

PS必須漫画:「Perlを救ってください!」(別名XKCD#208)一般的な表現")


1私のようなシステムによっては、呼び出し時に実行されるプログラムでもありますrename。しかし、@Philipposのコメントで言及されているutil-linuxとは異なります。実行しman renameて一番下までスクロールすると、Perlから来たのかutil-linuxから来たのかがわかります。

答え2

lsfind私は/、sedとの組み合わせを使用しますsh

ls |sed -E '/TEST_API_CICD/{s!^(.*TEST_API_CICD)_........._..:..:..(\.json)$!mv -i "&" "\1\2"!;p};d'

sの最初の部分/は、名前を変更するファイルを選択するモードです。括弧内の部分は。パターンを使用して新しいファイル名で保持される部分\1\2\3...いいえ括弧内は削除する部分です。 (ドット)は、グローバル式の.ように任意の文字です。?.0個以上の文字です(例:グローバル表現から)。^そして、$すべての文字が一致するように、最初と最後にパターンを固定します。

結果を確認し(|moreまたは使用|less、異常の|grep ...兆候を検索し)、結果が良く見える場合に実行します|sh

関連情報