Я копирую .mozilla каждый (ре) начальная загрузка к папке ~/nas-backups/mozilla, но я только хочу сохранить новые 10 папок в алфавитном порядке. Резервные копии снабжены отметкой даты, например, .mozilla_2018_11_05_08:13
Я хочу удалить всех кроме новых 10 как часть сценария, но поскольку они - скрытые файлы, я не могу найти способ сделать это:
комната-R 'ls-t | хвост-n +11', поскольку это игнорирует скрытые файлы/папки.
Я попробовал комнату-R 'ls-ta | хвост-n +11', но это не работает также.
Если бы это могло бы быть расширено так, это только сохранило первое резервное копирование каждого дня, который был бы премией.
Я могу запросить объяснение каких-либо предложений?Спасибо.
Какая-либо справка?
Не для имен с пробелами или символами новой строки.
Хорошо в Вашем случае, где имена похожи на ".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'
Попробуйте это:
ls -tA|tail -n +11|xargs rm -R
Это удаляет все кроме последних 10 файлов или папок (ко времени изменения файла) в простой остроте.
ls -tA
списки все файлы включая скрытые, но без .
и ..
специальные файлы, отсортированные по времени изменения (новейший первый).
tail -n +11
затем берет только те файлы, начинающие с 11-й записи (т.е. все кроме новейших 10).
xargs
просто берет вывод от хвоста и использует его в качестве аргументов комнате (выполняющий комнату однажды для каждой строки от хвоста). Полезный для команд, которые не работают с простым каналом.