Bash несколько копировать последние файлы с отметкой времени с помощью регулярных выражений - PullRequest
0 голосов
/ 04 июня 2018

пожалуйста, мне нужна помощь с переименованием нескольких файлов.Одно приложение в наших ежедневных 3-х отчетах с файловой маской OPEN_REPORTn_yyyymmddHH24Miss.csv, например, с таким списком:

/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 команда, как мне нужно.Я хочу скопировать эти файлы только с помощью одной команды 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

, но результат для echo не выглядитхорошо.

Пожалуйста, помогите с решением?Спасибо за любой совет

РЕШЕНИЕ (спасибо David Peltier ):

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

1 Ответ

0 голосов
/ 04 июня 2018

попробуйте

for file in $(ls -1 /mnt/server/*.csv); do cp /mnt/server/$file /mnt/server/${file%_*}.csv;done

Bash может заменить, и вам больше не нужно использовать sed.

$ {var% Pattern}, $ {var %% Pattern}

${var%Pattern} Remove from $var the shortest part of $Pattern that matches the back end of $var.

${var%%Pattern} Remove from $var the longest part of $Pattern that matches the back end of $var. 

https://www.tldp.org/LDP/abs/html/parameter-substitution.html

...