0

以下に示すように、名前形式のファイルが複数あります。

  1. ABC_Report_v-20120801_1741.csv
  2. ABC_Report_v-20120801_1741.csv
  3. ABC_Report_v-20120907_1254.csv
  4. XYZ_Dashboard_v-20120802_1804.csv
  5. XYZ_Dashboard_v-20120806_2031.csv
  6. XYZ_Dashboard_v-20120802_1946.csv

最新のもの以外のすべてのファイルを削除したいのですABC_Report_v-20120907_1254.csvが、文字XYZ_Dashboard_v-20120802_1946.csv の前に同じ名前の複数のファイルは、最新のものだけを残して削除する必要があります。_v

4

1 に答える 1

1

これは行の重複を防ぐものではないことに注意してください。このuniqように処理する前にファイルリストを作成するか、すでになくなっているファイルを削除しようとするときにエラーを無視することを忘れないでください。

$ awk -F- 'NR>1 && $1==base {print last} {base=$1;last=$0}' files.txt
ABC_Report_v-20120801_1741.csv
ABC_Report_v-20120801_1741.csv
XYZ_Dashboard_v-20120802_1804.csv
XYZ_Dashboard_v-20120806_2031.csv

ここから、一致したファイルが保持するファイルであることを確認したら、出力をパイプで渡すことができますxargs -n 1 rm

このソリューションでは、ファイル リストを日付順に並べ替える必要があることに注意してください。lsこれは、ほとんどのシステムでのデフォルトの動作です。そう:

$ ls | awk '...' | xargs -n 1 rm -v

自分の行っていることに 100% の自信がない場合は、プログラムによる削除を行う前に、必ずデータをバックアップしてください。とにかく、常にデータをバックアップしてください。次の太陽の黒点はいつ来るかわかりません。

于 2012-09-13T13:00:19.620 に答える