Следуя этой идее символической ссылки ctrl -alt -delor , используя shuf
из GNU coreutils (этот код также использует readlink -f
из GNU coreutils, чтобы получить абсолютный путь к данному файлу для создания символической ссылки):
#!/bin/sh -e
shufdir=shufdir # directory at this path will be deleted and recreated
rm -rf "$shufdir"
mkdir -p "$shufdir"
printf '%s\n' "$@" | shuf |
while read -r fname; do
ln -s "$( readlink -f "$1" )" "$shufdir/$fname"
shift
done
Сценарий берет имена файлов для перетасовки в своей командной строке. Он создает $shufdir
как подкаталог и продолжает перемешивать все заданные имена файлов. Перемешанные имена файлов затем символически связываются в $shufdir
с исходным списком имен файлов, заданным в командной строке.
Код предполагает, что имена путей не содержат новых строк.
Тестирование:
$ ls -l
total 4
-rw-r--r-- 1 kk wheel 0 Mar 14 18:13 file-1
-rw-r--r-- 1 kk wheel 0 Mar 14 18:13 file-10
-rw-r--r-- 1 kk wheel 0 Mar 14 18:13 file-2
-rw-r--r-- 1 kk wheel 0 Mar 14 18:13 file-3
-rw-r--r-- 1 kk wheel 0 Mar 14 18:13 file-4
-rw-r--r-- 1 kk wheel 0 Mar 14 18:13 file-5
-rw-r--r-- 1 kk wheel 0 Mar 14 18:13 file-6
-rw-r--r-- 1 kk wheel 0 Mar 14 18:13 file-7
-rw-r--r-- 1 kk wheel 0 Mar 14 18:13 file-8
-rw-r--r-- 1 kk wheel 0 Mar 14 18:13 file-9
-rw-r--r-- 1 kk wheel 247 Mar 14 18:39 script.sh
$ sh script.sh file-*
$ ls -l shufdir/
total 0
lrwxr-xr-x 1 kk wheel 31 Mar 14 18:39 file-1 -> /tmp/shell-yash.WkdNi1GD/file-8
lrwxr-xr-x 1 kk wheel 31 Mar 14 18:39 file-10 -> /tmp/shell-yash.WkdNi1GD/file-9
lrwxr-xr-x 1 kk wheel 31 Mar 14 18:39 file-2 -> /tmp/shell-yash.WkdNi1GD/file-4
lrwxr-xr-x 1 kk wheel 31 Mar 14 18:39 file-3 -> /tmp/shell-yash.WkdNi1GD/file-1
lrwxr-xr-x 1 kk wheel 31 Mar 14 18:39 file-4 -> /tmp/shell-yash.WkdNi1GD/file-3
lrwxr-xr-x 1 kk wheel 31 Mar 14 18:39 file-5 -> /tmp/shell-yash.WkdNi1GD/file-2
lrwxr-xr-x 1 kk wheel 31 Mar 14 18:39 file-6 -> /tmp/shell-yash.WkdNi1GD/file-6
lrwxr-xr-x 1 kk wheel 31 Mar 14 18:39 file-7 -> /tmp/shell-yash.WkdNi1GD/file-7
lrwxr-xr-x 1 kk wheel 31 Mar 14 18:39 file-8 -> /tmp/shell-yash.WkdNi1GD/file-5
lrwxr-xr-x 1 kk wheel 32 Mar 14 18:39 file-9 -> /tmp/shell-yash.WkdNi1GD/file-10
Ничто не мешает вам копировать или перемещать файлы в новый каталог или использовать жесткие ссылки вместо символических ссылок (если каталог $shufdir
находится в том же разделе, что и исходные файлы ). Вам просто нужно изменить строку с помощью команды ln -s
.
Используйте du -hx --max-depth=1 /
, чтобы увидеть, какие каталоги первого уровня содержат большую часть данных. Повторите это для соответствующих подкаталогов (, например.du -hx --max-depth=1 /home
)пока не дойдете до тех каталогов, которые содержат много данных (несколько больших файлов или много маленьких файлов ).
Затем подумайте, откуда берутся эти данные, (важные данные, файлы журналов ), которые вы можете удалить, и как можно замедлить рост хранимых данных. Возможно, поможет автоматическое удаление старых данных(man logrotate
).
Ваша проблема связана с обновлениями ядра, которые не удаляют старые ядра. В какой-то степени полезно (сохранить один или два )на случай, если новый вызовет проблемы. У вас, вероятно, тоже много таких файлов в /boot
.
Вы можете удалить все файлы ядер, которые вам больше не нужны. Лучший способ, вероятно, удалить пакеты ядра.
Я не использую Ubuntu, поэтому не могу сообщить никаких подробностей, но есть решение Ubuntu для автоматического удаления старых ядер после обновлений.Должно быть легко найти с помощью поисковой системы или наhttps://askubuntu.com/