Удалите 3 самых старых файла на основе имени файла

Я хочу удалить 3 самых старых файла на основе их имени файла.

Вот пример того, что находится в моем резервном каталоге. Будет несколько копий с различными временами.

Ubuntu_Scripts.zip_2018-08-09-21

Это заканчивает тем, что удалило все файлы и не оставило новейший или два.

lst=$(ls -t /media/andy/MAXTOR_SDB1/Ubuntu_Mate_18.04/Ubuntu_Documents_*|tail -3)
for f in $lst;do if [ -f $f ];then rm -rf $f;

fi;готово

Если это помогло бы решить это, я могу генерировать файлы в date_filename формате.

0
задан 9 August 2018 в 19:09

2 ответа

Учитывая Ваш формат имени файла, простой лексический вид должен быть достаточным. Так, например,

printf '%s\0' Ubuntu_Scripts.zip_* | sort -z | head -zn3 | xargs -0 echo rm --

-z не необходимо для Ваших примеров, но ничего не стоит и делает конвейер допустимым для любых официальных имен (включая тех, которые содержат новые строки).

Удалите echo после того как Вы удовлетворены, что это определяет соответствующие файлы.

--

Если zsh доступно, Вы могли удалить первые три файла соответствия, по имени возрастающие, используя встроенные спецификаторы шарика:

rm -- Ubuntu_Scripts.zip_*(.on[1,3])
1
ответ дан 28 October 2019 в 04:35
#!/bin/bash
# Ubuntu_Mate 18.04 LTS
#
# Delete all but 2 newest files in selected directory
# 

ls -1t /media/andy/MAXTOR_SDB1/Ubuntu_Mate_18.04/Documents_Backups/Ubuntu_Documents_* | 
# skip (leave) the 2 newest
tail -n +3 |
# delete the 3 oldest
tail -n -3 |
while IFS= read -r file
do
  rm "$file"
done   
exit 0
0
ответ дан 28 October 2019 в 04:35

Другие вопросы по тегам:

Похожие вопросы: