2015-10-06 4 views
0

У меня есть 10K + файлы, как показано ниже. Дата файловой системы (время экспорта) - одна для всех файлов.bash: удалить все файлы, кроме последней версии, в имени файла

YYY101R1.corp.company.org-RUNNINGCONFIG-2015-07-10-23-10-15.config 
YYY101R1.corp.company.org-RUNNINGCONFIG-2015-07-11-22-11-10.config 
YYY101R1.corp.company.org-RUNNINGCONFIG-2015-10-01-10-05-08.config 

LLL101S1.corp.company.org-RUNNINGCONFIG-2015-08-10-23-10-15.config 
LLL101S1.corp.company.org-RUNNINGCONFIG-2015-09-11-20-11-10.config 
LLL101S1.corp.company.org-RUNNINGCONFIG-2015-10-02-19-05-07.config 

Как я могу удалить все файлы, за исключением последней версии (последняя дата) файла с именем файла и переименовать его в

YYY101R1.corp.company.org.config 
LLL101S1.corp.company.org.config 

Спасибо.

+0

позволяет начать с кодом у вас есть для создания списка файлов ... –

ответ

0

выдайте команду UNIX оболочки

ls -t YYY101R1.corp.company.org* 

будет список файлов в порядке возраста, сперва новые. Возьмите первую строку как «последняя» и сделать символический («мягкий») ссылку на него:

ln -s $latest YYY101R1.corp.company.org.config 

Повторите для каждой группы файлов.

Это вас устраивает? Если нет, отправьте свой код и объясните конкретную проблему. См. https://stackoverflow.com/help/mcve

+0

У меня есть правильное время в имени файла только, так сортировать по отметкам времени не работает. – uatousa

+0

Это делает его крошечным количеством проще: ваше именование сортирует файлы по порядку. Используйте 'ls -r', чтобы поместить последний файл первым - по имени, а не по метке времени. – Prune

0

У меня есть что-то похожее, сначала получите список всех отсортированных по возрастанию по времени модификации, затем получите их число, отобразите все минус последние 2 из них и передайте это, чтобы перечислить команду удаления файла.

ls -tr | wc -l

ls -tr | head -number_of_files_minus_2 | xargs rm

Было ли это полезно?

+0

У меня есть правильная дата и время файла в имени файла. Время системного файла одинаково для всех файлов (дата и время экспорта). – uatousa

+0

Так что, возможно, для первой команды просто алфавитная сортировка 'ls | sort -t- -k3' Будет сортировать файлы по дате в именах файлов. – grimsock

+0

есть способ получить количество файловых групп для головы -? – uatousa

0
FLast=`ls -tr 'YYY101R1.corp.company.org*' | tail -n 1` 

mv ${FLast} YYY101R1.corp.company.org.config 
rm -f YYY101R1.corp.company.org-RUNNINGCONFIG-* 
Смежные вопросы