Как я могу удалить все кроме новейших 10 скрытых папок в каталоге

Я копирую .mozilla каждый (ре) начальная загрузка к папке ~/nas-backups/mozilla, но я только хочу сохранить новые 10 папок в алфавитном порядке. Резервные копии снабжены отметкой даты, например, .mozilla_2018_11_05_08:13

Я хочу удалить всех кроме новых 10 как часть сценария, но поскольку они - скрытые файлы, я не могу найти способ сделать это:

комната-R 'ls-t | хвост-n +11', поскольку это игнорирует скрытые файлы/папки.

Я попробовал комнату-R 'ls-ta | хвост-n +11', но это не работает также.

Если бы это могло бы быть расширено так, это только сохранило первое резервное копирование каждого дня, который был бы премией.

Я могу запросить объяснение каких-либо предложений?Спасибо.

Какая-либо справка?

1
задан 9 January 2019 в 00:19

2 ответа

  • Не для имен с пробелами или символами новой строки.

  • Хорошо в Вашем случае, где имена похожи на ".mozilla_2018_11_05_08:13".

  • Я предположил, что нет никаких других файлов или папок в родительской папке ~/nas-backups/mozilla

  • Протестированный это перед регистрацией:

    cd ~/nas-backups/mozilla
    total=$(ls -1A|wc -l); remove=$((total - 10)); rm -rv $(ls -1vA|head -n $remove)
    

explaination

total=$(ls -1A|wc -l) #total number of folders
remove=$((total - 10)) #total -10 so that 10 folders are not removed
rm -rv $(ls -1vA|head -n $remove) # removes total -10 from top(head)
# because older folders(by name) are first in ls -1vA (v switch lists the names 
# proper numeric order.

ls - справка

- v естественный вид (версии) числа в рамках текста

Пример:

:~/nas-backups/mozilla$ ls -1vA
.mozilla_2019_01_09_01:16
.mozilla_2019_01_09_18:12
.mozilla_2019_01_09_18:16
.mozilla_2019_01_09_19:16
.mozilla_2019_01_09_20:16
.mozilla_2019_01_10_01:16
.mozilla_2019_01_10_18:12
.mozilla_2019_01_10_18:16
.mozilla_2019_01_10_19:16
.mozilla_2019_01_10_20:16
.mozilla_2019_02_09_02:16
.mozilla_2019_02_09_18:12
.mozilla_2019_02_09_18:16
.mozilla_2019_02_09_19:16
.mozilla_2019_02_09_20:16
.mozilla_2019_03_09_03:16
.mozilla_2019_03_09_18:12
.mozilla_2019_03_09_18:16
.mozilla_2019_03_09_19:16
.mozilla_2019_03_09_20:16
.mozilla_2019_03_10_03:16
.mozilla_2019_03_10_18:12
.mozilla_2019_03_10_18:16
.mozilla_2019_03_10_19:16
.mozilla_2019_03_10_20:16
:~/nas-backups/mozilla$ total=$(ls -1A|wc -l); remove=$((total - 10)); rm -rv $(ls -1vA|head -n $remove)
removed directory '.mozilla_2019_01_09_01:16'
removed directory '.mozilla_2019_01_09_18:12'
removed directory '.mozilla_2019_01_09_18:16'
removed directory '.mozilla_2019_01_09_19:16'
removed directory '.mozilla_2019_01_09_20:16'
removed directory '.mozilla_2019_01_10_01:16'
removed directory '.mozilla_2019_01_10_18:12'
removed directory '.mozilla_2019_01_10_18:16'
removed directory '.mozilla_2019_01_10_19:16'
removed directory '.mozilla_2019_01_10_20:16'
removed directory '.mozilla_2019_02_09_02:16'
removed directory '.mozilla_2019_02_09_18:12'
removed directory '.mozilla_2019_02_09_18:16'
removed directory '.mozilla_2019_02_09_19:16'
removed directory '.mozilla_2019_02_09_20:16'
1
ответ дан 7 December 2019 в 13:19

Попробуйте это:

ls -tA|tail -n +11|xargs rm -R

Это удаляет все кроме последних 10 файлов или папок (ко времени изменения файла) в простой остроте.

ls -tA списки все файлы включая скрытые, но без . и .. специальные файлы, отсортированные по времени изменения (новейший первый).

tail -n +11 затем берет только те файлы, начинающие с 11-й записи (т.е. все кроме новейших 10).

xargs просто берет вывод от хвоста и использует его в качестве аргументов комнате (выполняющий комнату однажды для каждой строки от хвоста). Полезный для команд, которые не работают с простым каналом.

1
ответ дан 7 December 2019 в 13:19

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

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