Я знаю, что это старый вопрос. Но приземлился здесь и поделился на случай, если это понадобится кому-то другому.
#!/bin/bash
FTP_DIR=/var/lib/ftp # change to location of dir
FILESTOKEEP=7
ls -1t $FTP_DIR/*.tar | awk -v FILESTOKEEP=$FILESTOKEEP '{if (NR>FILESTOKEEP) print $0}' | xargs rm
Обычно я перечисляю все файлы в одном столбце -1
сортирую по времени модификации, сначала самые новые -t
Затем, используя awk
, я устанавливаю переменную с количество файлов, заданных параметром $ FILESTOKEEP
, и большее количество записей для печати.
Передача результатов в xargs
, в котором будет запускаться rm
в каждой строке вывода awk
Это будет работать, если сценарий не вызывается в папке который содержит файл, поскольку использование подстановочного знака в ls
заставит напечатать расширенный путь.
Похоже, у Btrfs есть проблемы с изменением имен файлов блочных устройств (, например, /dev/sda ). У меня была такая же проблема:
Создал файловую систему Btrfs, записал некоторые данные, размонтировал, удалил диск из моей системы (это 2,5-дюймовый диск SATA ). Неделю спустя я снова подключил диск с горячей заменой, и мне не удалось его смонтировать. Can't read superblock
.btrfs rescue super-recover
сказал, что все хорошо. Я даже сделал btrfs check
, и это также подтвердило, что все хорошо.
У меня более старое ядро :4.15-Я думаю, что это уже решено в более новой версии Btrfs (более новые ядра ), но для старых -просто перезагрузитесь.
Система перечислит диски, и ваша файловая система Btrfs должна смонтироваться без проблем.
Если это не работает, -попробуйте обновить ядро.
У меня есть Btrfs в качестве rootfs, и у меня возникла аналогичная проблема в Ubuntu 18.04 после зависания системы. Btrfs не удалось смонтировать при следующей загрузке. Я использую Ubuntu LiveUSB для загрузки и btrfs rescue zero-log
устранил проблему для меня.
Деталь:
$ sudo mount -o ro /dev/nvme0n1p2 /2
mount: /2: can't read superblock on /dev/nvme0n1p2.
(Сначала я делаю резервную копию раздела с помощью dd на внешнее запоминающее устройство.)
btrfs check --check-data-csum
означает, что все в порядке. btrfs inspect-internal dump-super
говорит, что суперблок в порядке, а btrfs rescue super-recover
указывает, что ремонтировать нечего.
Но я заметил следующее сообщение ядра после попытки монтирования
BTRFS info (device nvme0n1p2): start tree-log replay
BTRFS critical (device nvme0n1p2): corrupt leaf: root=18446744073709551610 block=1252150951936 slot=129 ino=7029 file_offset=164888576, file extent end range (169345024) goes beyond start offset (168624128) of the next file extent
BTRFS error (device nvme0n1p2): block=1252150951936 read time tree block corruption detected
BTRFS: error (device nvme0n1p2) in btrfs_replay_log:2281: errno=-5 IO failure (Failed to recover log tree)
BTRFS info (device nvme0n1p2): delayed_refs has NO entry
BTRFS error (device nvme0n1p2): open_ctree failed
Похоже, журнал дерева поврежден. Я нахожу btrfs rescue --help
говорит
btrfs rescue zero-log <device>
Clear the tree log. Usable if it's corrupted and prevents mount.
и btrfs rescue zero-log
устранили проблему.
$ sudo btrfs rescue zero-log /dev/nvme0n1p2
Clearing log on /dev/nvme0n1p2, previous log_root 1252152229888, level 0