bugfix> regex > 投稿

複数のファイルの名前を変更するのに助けが必要です。ファイルマスク OPEN_REPORTn_yyyymmddHH24Miss.csv で毎日3つのレポートを生成する1つのアプリケーション 、たとえば次のようなリスト:

/mnt/server/OPEN_REPORT1_20180604130922.csv
/mnt/server/OPEN_REPORT2_20180604130922.csv
/mnt/server/OPEN_REPORT3_20180604130922.csv

このファイルをコピーしてほしい

/mnt/server/OPEN_REPORT1.csv
/mnt/server/OPEN_REPORT2.csv
/mnt/server/OPEN_REPORT3.csv

名前を変更せずに元のファイルを保持します(つまり、最後の3つのファイルのみをリストする必要があることを意味します)

私はこの解決策を持っています:

cp $(ls -t /mnt/server/OPEN_REPORT1_* | head -n1) /mnt/server/OPEN_REPORT1.csv
cp $(ls -t /mnt/server/OPEN_REPORT2_* | head -n1) /mnt/server/OPEN_REPORT2.csv
cp $(ls -t /mnt/server/OPEN_REPORT3_* | head -n1) /mnt/server/OPEN_REPORT3.csv

しかし、私はより多くの cp を使用しているため、この解決策はあまり効果的ではありません必要に応じてコマンド。私はそれらのファイルを1回だけ cp でコピーしたいコマンドおよび正規表現付き。

私はこのような解決策を試みています:

for file in $(ls -t /mnt/server/OPEN_REPORT?_??????????????.csv | head -n3); do echo ${file} | sed 's/OPEN_REPORT([0-9]{1})/$1/'; done

しかし、エコーの結果はうまく見えません。

解決策について助けてください。アドバイスをありがとう

解決 (ありがとうデビッド・ペルティエ):

for file in $(ls -t /mnt/server/OPEN_REPORT?_??????????????.csv | head -n3); do cp $file ${file%_*}.csv; done