![Оставить только две последние папки в каталоге](https://rvso.com/image/1415072/%D0%9E%D1%81%D1%82%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%D1%82%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE%20%D0%B4%D0%B2%D0%B5%20%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BD%D0%B8%D0%B5%20%D0%BF%D0%B0%D0%BF%D0%BA%D0%B8%20%D0%B2%20%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3%D0%B5.png)
У меня есть каталог, в котором находятся следующие папки.
Data-2014-07-10-0240
Data-2014-07-10-0340
Data-2014-07-11-1232
Data-2014-07-12-0530
Data-2014-07-13-1210
Я хочу оставить только последние две папки и удалить остальные. Папка имеет следующий формат: Data-YYYY-MM-DD-HHMM
.
Есть ли способ, с помощью которого я могу сравнить имена папок и сохранить последние, а остальные удалить? Я могу учесть это позже в моем скрипте оболочки.
решение1
Я предполагаю, что название каталогов также является временной меткой их создания. Если это так, то вы можете использоватьлсдля составления списка файлов в соответствии со временем изменения каталогов.
Это выведет список каталогов в порядке от самых новых к первым.
cd /PATH/TO/PARENT-DIRECTORY/
ls -lt
Чтобы удалить все каталоги, кроме последних 2 файлов:-
cd /PATH/TO/PARENT-DIRECTORY/
ls -lt | tail -n +4 | awk '{print $9}' | xargs rm -r
Примечание:Сначала попробуйте его в тестовой среде и тщательно проверьте, действительно ли это то, что вы хотите сделать, а также работает ли этот скрипт с вашим набором каталогов.