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

Пару недель выпуска LibreOffice 3.4, сегодня я смотрел на их веб-сайте заметки о выпуске и новые функции, я нашел пару сюрпризов, во-первых, он наконец-то интегрировал механизм рендеринга источников, а во-вторых, он добился лучшей интеграции с GTK +, что приводит к двум функциям, которые, несомненно, значительно улучшат визуальный набор.

Улучшение интеграции gtk + темы, что делает LibreOffice более родным. Исправить разделители меню, проблемы с клавишами Alt, кнопки Toggle и многие подробности рендеринга виджета.
3
задан 30 June 2017 в 17:05

9 ответов

Простой способ, который отлично работает с вашими именами файлов, заключается в использовании:

ls -t1 | tail -n +11 | xargs gvfs-rm
ls -t1 дает нам список файлов, основанных на их времени модификации, а также самые новые файлы. используя tail -n +11, мы пропустим первую 10 строк и получим все остальное, а затем перетащите список в xargs gvfs-rm для удаления.

Обратите внимание, что gvfs-rm перемещает файл в корзину, используйте rm для их окончательного удаления.

Если вы хотите работать с именами файлов вместо их времени модификации, используйте ls -1r | tail -n +11 | xargs gvfs-rm.

Аналогичное решение find, которое решает на основе имен файлов:

find -type f | sort -r | tail -n +11 | xargs gvfs-rm

или

find -type f | sort | head -n -10 | xargs gvfs-rm
5
ответ дан 22 May 2018 в 21:00
  • 1
    Похоже, что это может содержать самую старую десятку и удалять что-либо более новое, чем самые старые десять файлов. Я пытаюсь сохранить новейшую десятку и удалить что-нибудь старше десяти самых новых файлов. Спасибо за совет, хотя пока очень полезно! – J0991 30 June 2017 в 16:46
  • 2
    Да, я тестировал команду, указанную выше в терминале, и я вижу самый последний файл (11-й), удаленный из каталога. В этом случае 1-й файл из 11 должен быть удален. – J0991 30 June 2017 в 16:49
  • 3
    Это сработало отлично! Спасибо, что вы спасли мою задницу этим утром: D Просто интересно, если у вас есть время, чтобы обновить описание команды, выполненной в вашем ответе выше? Я хотел бы точно знать, почему это работает! – J0991 30 June 2017 в 16:55
  • 4
    Обновлено снова и приветствуется ... – Ravexina 30 June 2017 в 16:59
  • 5
    Твое лучшее! Большое вам спасибо за ваши усилия! – J0991 30 June 2017 в 16:59

Простой способ, который отлично работает с вашими именами файлов, заключается в использовании:

ls -t1 | tail -n +11 | xargs gvfs-rm ls -t1 дает нам список файлов, основанных на их времени модификации, а также самые новые файлы. используя tail -n +11, мы пропустим первую 10 строк и получим все остальное, а затем перетащите список в xargs gvfs-rm для удаления.

Обратите внимание, что gvfs-rm перемещает файл в корзину, используйте rm для их окончательного удаления.

Если вы хотите работать с именами файлов вместо их времени модификации, используйте ls -1r | tail -n +11 | xargs gvfs-rm.

Аналогичное решение find, которое решает на основе имен файлов:

find -type f | sort -r | tail -n +11 | xargs gvfs-rm

или

find -type f | sort | head -n -10 | xargs gvfs-rm
5
ответ дан 18 July 2018 в 10:53

Простой способ, который отлично работает с вашими именами файлов, заключается в использовании:

ls -t1 | tail -n +11 | xargs gvfs-rm ls -t1 дает нам список файлов, основанных на их времени модификации, а также самые новые файлы. используя tail -n +11, мы пропустим первую 10 строк и получим все остальное, а затем перетащите список в xargs gvfs-rm для удаления.

Обратите внимание, что gvfs-rm перемещает файл в корзину, используйте rm для их окончательного удаления.

Если вы хотите работать с именами файлов вместо их времени модификации, используйте ls -1r | tail -n +11 | xargs gvfs-rm.

Аналогичное решение find, которое решает на основе имен файлов:

find -type f | sort -r | tail -n +11 | xargs gvfs-rm

или

find -type f | sort | head -n -10 | xargs gvfs-rm
5
ответ дан 24 July 2018 в 19:40

Если у вас есть доступ к zsh, это намного проще, чем прыгать, хотя обручи с ls, find или stat. Например, данный

 % ls -1 JenkinsBackup_*
JenkinsBackup_20170630-095544.tar.gz
JenkinsBackup_20170630-095545.tar.gz
JenkinsBackup_20170630-095546.tar.gz
JenkinsBackup_20170630-095547.tar.gz
JenkinsBackup_20170630-095548.tar.gz
JenkinsBackup_20170630-095549.tar.gz
JenkinsBackup_20170630-095550.tar.gz
JenkinsBackup_20170630-095551.tar.gz
JenkinsBackup_20170630-095552.tar.gz
JenkinsBackup_20170630-095553.tar.gz
JenkinsBackup_20170630-095554.tar.gz
JenkinsBackup_20170630-095555.tar.gz
JenkinsBackup_20170630-095556.tar.gz
JenkinsBackup_20170630-095557.tar.gz
JenkinsBackup_20170630-095558.tar.gz

Список по времени модификации, самый новый сначала, используя om (порядок по времени модификации) glob qualifier:

 % printf '%s\n' JenkinsBackup_*(om)
JenkinsBackup_20170630-095558.tar.gz
JenkinsBackup_20170630-095557.tar.gz
JenkinsBackup_20170630-095556.tar.gz
JenkinsBackup_20170630-095555.tar.gz
JenkinsBackup_20170630-095554.tar.gz
JenkinsBackup_20170630-095553.tar.gz
JenkinsBackup_20170630-095552.tar.gz
JenkinsBackup_20170630-095551.tar.gz
JenkinsBackup_20170630-095550.tar.gz
JenkinsBackup_20170630-095549.tar.gz
JenkinsBackup_20170630-095548.tar.gz
JenkinsBackup_20170630-095547.tar.gz
JenkinsBackup_20170630-095546.tar.gz
JenkinsBackup_20170630-095545.tar.gz
JenkinsBackup_20170630-095544.tar.gz

Список по времени модификации, (! d4)

 % printf '%s\n' JenkinsBackup_*(om[11,-1])
JenkinsBackup_20170630-095548.tar.gz
JenkinsBackup_20170630-095547.tar.gz
JenkinsBackup_20170630-095546.tar.gz
JenkinsBackup_20170630-095545.tar.gz
JenkinsBackup_20170630-095544.tar.gz

Удалить совпадающие файлы старше 10-го:

 % rm -v JenkinsBackup_*(om[11,-1])
removed 'JenkinsBackup_20170630-095548.tar.gz'
removed 'JenkinsBackup_20170630-095547.tar.gz'
removed 'JenkinsBackup_20170630-095546.tar.gz'
removed 'JenkinsBackup_20170630-095545.tar.gz'
removed 'JenkinsBackup_20170630-095544.tar.gz'

См. zsh: 14 Расширение: Генерация имени файла

]
1
ответ дан 22 May 2018 в 21:00

Python

Предполагаю, что каталог содержит только ваши резервные копии.

import os
for f in sorted(os.listdir('.'))[:-10]:
    os.remove(f)

Объяснение

os.listdir('.') получает имена файлов в текущем каталоге sorted() сортирует имена файлов в порядке возрастания ( самый старый) [:-10] выбирает весь список, за исключением последних десяти элементов os.remove() удаляет каждый файл
1
ответ дан 22 May 2018 в 21:00

Если у вас есть доступ к zsh, это намного проще, чем прыгать, хотя обручи с ls, find или stat. Например, данный

% ls -1 JenkinsBackup_* JenkinsBackup_20170630-095544.tar.gz JenkinsBackup_20170630-095545.tar.gz JenkinsBackup_20170630-095546.tar.gz JenkinsBackup_20170630-095547.tar.gz JenkinsBackup_20170630-095548.tar.gz JenkinsBackup_20170630-095549.tar.gz JenkinsBackup_20170630-095550.tar.gz JenkinsBackup_20170630-095551.tar.gz JenkinsBackup_20170630-095552.tar.gz JenkinsBackup_20170630-095553.tar.gz JenkinsBackup_20170630-095554.tar.gz JenkinsBackup_20170630-095555.tar.gz JenkinsBackup_20170630-095556.tar.gz JenkinsBackup_20170630-095557.tar.gz JenkinsBackup_20170630-095558.tar.gz

Список по времени модификации, самый новый сначала, используя om (порядок по времени модификации) glob qualifier:

% printf '%s\n' JenkinsBackup_*(om) JenkinsBackup_20170630-095558.tar.gz JenkinsBackup_20170630-095557.tar.gz JenkinsBackup_20170630-095556.tar.gz JenkinsBackup_20170630-095555.tar.gz JenkinsBackup_20170630-095554.tar.gz JenkinsBackup_20170630-095553.tar.gz JenkinsBackup_20170630-095552.tar.gz JenkinsBackup_20170630-095551.tar.gz JenkinsBackup_20170630-095550.tar.gz JenkinsBackup_20170630-095549.tar.gz JenkinsBackup_20170630-095548.tar.gz JenkinsBackup_20170630-095547.tar.gz JenkinsBackup_20170630-095546.tar.gz JenkinsBackup_20170630-095545.tar.gz JenkinsBackup_20170630-095544.tar.gz

Список по времени модификации, (! d4) % printf '%s\n' JenkinsBackup_*(om[11,-1]) JenkinsBackup_20170630-095548.tar.gz JenkinsBackup_20170630-095547.tar.gz JenkinsBackup_20170630-095546.tar.gz JenkinsBackup_20170630-095545.tar.gz JenkinsBackup_20170630-095544.tar.gz

Удалить совпадающие файлы старше 10-го:

% rm -v JenkinsBackup_*(om[11,-1]) removed 'JenkinsBackup_20170630-095548.tar.gz' removed 'JenkinsBackup_20170630-095547.tar.gz' removed 'JenkinsBackup_20170630-095546.tar.gz' removed 'JenkinsBackup_20170630-095545.tar.gz' removed 'JenkinsBackup_20170630-095544.tar.gz'

См. zsh: 14 Расширение: Генерация имени файла

]
1
ответ дан 18 July 2018 в 10:53

Python

Предполагаю, что каталог содержит только ваши резервные копии.

import os for f in sorted(os.listdir('.'))[:-10]: os.remove(f)

Объяснение

os.listdir('.') получает имена файлов в текущем каталоге sorted() сортирует имена файлов в порядке возрастания ( самый старый) [:-10] выбирает весь список, за исключением последних десяти элементов os.remove() удаляет каждый файл
1
ответ дан 18 July 2018 в 10:53

Если у вас есть доступ к zsh, это намного проще, чем прыгать, хотя обручи с ls, find или stat. Например, данный

% ls -1 JenkinsBackup_* JenkinsBackup_20170630-095544.tar.gz JenkinsBackup_20170630-095545.tar.gz JenkinsBackup_20170630-095546.tar.gz JenkinsBackup_20170630-095547.tar.gz JenkinsBackup_20170630-095548.tar.gz JenkinsBackup_20170630-095549.tar.gz JenkinsBackup_20170630-095550.tar.gz JenkinsBackup_20170630-095551.tar.gz JenkinsBackup_20170630-095552.tar.gz JenkinsBackup_20170630-095553.tar.gz JenkinsBackup_20170630-095554.tar.gz JenkinsBackup_20170630-095555.tar.gz JenkinsBackup_20170630-095556.tar.gz JenkinsBackup_20170630-095557.tar.gz JenkinsBackup_20170630-095558.tar.gz

Список по времени модификации, самый новый сначала, используя om (порядок по времени модификации) glob qualifier:

% printf '%s\n' JenkinsBackup_*(om) JenkinsBackup_20170630-095558.tar.gz JenkinsBackup_20170630-095557.tar.gz JenkinsBackup_20170630-095556.tar.gz JenkinsBackup_20170630-095555.tar.gz JenkinsBackup_20170630-095554.tar.gz JenkinsBackup_20170630-095553.tar.gz JenkinsBackup_20170630-095552.tar.gz JenkinsBackup_20170630-095551.tar.gz JenkinsBackup_20170630-095550.tar.gz JenkinsBackup_20170630-095549.tar.gz JenkinsBackup_20170630-095548.tar.gz JenkinsBackup_20170630-095547.tar.gz JenkinsBackup_20170630-095546.tar.gz JenkinsBackup_20170630-095545.tar.gz JenkinsBackup_20170630-095544.tar.gz

Список по времени модификации, (! d4) % printf '%s\n' JenkinsBackup_*(om[11,-1]) JenkinsBackup_20170630-095548.tar.gz JenkinsBackup_20170630-095547.tar.gz JenkinsBackup_20170630-095546.tar.gz JenkinsBackup_20170630-095545.tar.gz JenkinsBackup_20170630-095544.tar.gz

Удалить совпадающие файлы старше 10-го:

% rm -v JenkinsBackup_*(om[11,-1]) removed 'JenkinsBackup_20170630-095548.tar.gz' removed 'JenkinsBackup_20170630-095547.tar.gz' removed 'JenkinsBackup_20170630-095546.tar.gz' removed 'JenkinsBackup_20170630-095545.tar.gz' removed 'JenkinsBackup_20170630-095544.tar.gz'

См. zsh: 14 Расширение: Генерация имени файла

]
1
ответ дан 24 July 2018 в 19:40

Python

Предполагаю, что каталог содержит только ваши резервные копии.

import os for f in sorted(os.listdir('.'))[:-10]: os.remove(f)

Объяснение

os.listdir('.') получает имена файлов в текущем каталоге sorted() сортирует имена файлов в порядке возрастания ( самый старый) [:-10] выбирает весь список, за исключением последних десяти элементов os.remove() удаляет каждый файл
1
ответ дан 24 July 2018 в 19:40

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

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