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