Сценарий Shell для удаления старейших файлов и папок

То, что вы печатаете, похоже, является правильным именем файла (как оно хранится в каталоге).

  File: `\001\360\265E@X\342p@8\b@'

Вы можете восстановить имя (в байтах) из этого с помощью:

$ printf '%b' '\001\360\265E@X\342p@8\b@' | od -An -tx1
soh   p   5   E   @   X   b   p   @   8  bs   @
 01  f0  b5  45  40  58  e2  70  40  38  08  40

Как видите, строка начинается с управляющего символа (soh) или шестнадцатеричного 0x01 (Octal \ 001). Это имеет как плохие эффекты (файл трудно стереть), так и хорошие эффекты (очень маловероятно, что файл с тем же именем существует в каталоге).

После перемещения всех (других) файлов из каталога (на всякий случай).

Вы можете попытаться стереть файл, набрав rm , затем первый символ (soh) файла и звездочку ( * ) (аналогично тому, как вы делаете ] стереть * ). Уловка для ввода 0x01 заключается в том, чтобы ввести оба Ctrl и v , отпустить их и ввести оба Ctrl и A (без смены). ^ A должен появиться в позиции курсора. Затем введите звездочку * . Вы должны увидеть эту строку на своей консоли:

rm ^A*

Затем нажмите Enter, и, если он работает, файл должен исчезнуть.

Если это не сработает (попробуйте пару раз), всегда есть ядерное решение. Переместите и сотрите все остальные файлы, перейдите в родительский каталог, а затем выполните:

rm -rf ./CorrectDirectory        ### Be careful this will erase ANYthing.

Весь каталог (включая файл) исчезнет.

4
16.12.2018, 14:00
1 ответ

Надеюсь, нам не нужно беспокоиться о том, есть ли у нас одна папка или несколько папок. если мы удалим файлы с измененным временем.

Просто проверьте Хранилище и удалите 10 самых старых файлов в папке

if [ $CurrentStorage -ge $StorageThreshold ];
then
  find $RootFolder -type f -printf '%T+ %p\n' | sort  | head -n 10 | awk '{print $NF}' | xargs rm -f
else
  echo "Storage threshold not yet reached."
fi
  • -type f -printf '%T+ %p\n'распечатать файлы с отметкой времени последнего изменения.
  • sort, чтобы получить самый старый файл сверху.
  • head -n 10, чтобы получить 10 самых старых файлов.
  • awk '{print $NF}', чтобы извлечь путь к файлу.
  • xargs rm -fудалить извлеченные файлы.

Для MAC:

 find $RootFolder -type f -print0 | xargs -0 ls -ltr | head -n 10 | awk '{print $NF}' | xargs rm -f

Да и пустая папка вряд ли займет место в 4Кб. Если вы хотите удалить все пустые папки, кроме последней, включите приведенный ниже код.

  find $RootFolder -type d -empty -printf '%T+ %p\n' | sort | head -n -1 | xargs rm -rf

Или

 ls -lt $RootFolder/* | awk -F ":" '/total 0/{print last}{last=$1}' | tail -n +2 | xargs rm -rf
  • Будут удалены все пустые папки, кроме самой последней.
3
27.01.2020, 20:59

Теги

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