привет всем.
есть задача уменьшить место на диске. файлы не изменяемые. файлы лежат на одном разделе. значит можно попытаться сделать hard ссылки на одинаковые файлы.
на скорую руку сделал такой скрипт:
- перебираю файлы, подсчитываю sha1:
- fec6d770fdacda2a3c382ce0545d96623a42aa53 имя/файла
- потом хеш использую как имя файла .objects/fe/c6d770fdacda2a3c382ce0545d96623a42aa53
- если нет файла с именем .objects/fe/c6d770fdacda2a3c382ce0545d96623a42aa53 , то делаю его ссылкой на файл, есть он есть, то делаю ссылку наоборот.
- в конце всего этого удаляю каталог .objects
в итоге все одинаковые файлы будут ссылаться на один и тот же дескриптор.
сам скрипт:
#!/bin/bash
if [ -d .objects ]
then
rm -Rf .objects
fi
for file in $( find -xdev -type f )
do
sha=$( sha1sum $file | sed 's/^\(..\)/.objects\/\1\//' )
obj_name=$( echo $sha | cut -f1 -d ' ' )
file_name=$( echo $sha | cut -f2 -d ' ' )
dir_name=$( echo $sha | cut -c-12 )
mkdir -p "$dir_name"
if [ -f "$obj_name" ]
then
ln -f "$obj_name" "$file_name"
else
ln -f "$file_name" "$obj_name"
fi
done
if [ -d .objects ]
then
rm -Rf .objects
fi
ps. sh скрипты никогда не писал, поэтому и спрашиваю чего тут может быть неправильно и как его улучшить...