Дедупликация файлов при их перемещении в XFS

Чтобы отсортировать все обычные файлы в текущем каталоге или в нем по размеру, оболочка zshпредоставляет удобный **шаблон подстановки, который соответствует /в путях (, т.е. «рекурсивно вниз в подкаталоги )Это также позволяет квалифицировать шаблон так, чтобы вы, например, получали совпадения только с обычными файлами, а результаты сортировались в соответствии с размером этих файлов.

В оболочке zshэтот шаблон будет выглядеть как

**/*(.OL)

Это вернет все обычные файлы (.), упорядоченные в обратном(O)порядке размера(L).

Чтобы получить список только файлов, используйте

printf '%s\n' **/*(.OL)

Чтобы получить ls«длинный список», используйте

ls -fl **/*(.OL)

(опция -fзапрещает lsвыполнять собственную сортировку файлов ).

Если zshне является вашей обычной оболочкой, вы все равно можете использовать эти команды, предполагая, что zshустановлен в вашей системе:

zsh -c 'ls -fl **/*(.OL)'

Очевидно, вы могли бы также добавить --block-size=Mк этому, если вы используете GNU ls.

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

**/*(.OL[1,10])

вместо этого.

1
01.05.2021, 15:15
1 ответ

Мой подход состоит в том, чтобы создать каталог с хэш-ссылкой на каждый файл.

если хэш уже существует, я заменяю файл жесткой -ссылкой из хэша, если файл хэша не существует, я создаю новую жесткую ссылку из файла в каталоге хэша.

примерно так:

#!/bin/bash
dupes=/mnt/xfs/.dupes_dir
for x in "$@"
do
    sha=$( sha1sum "$x" | cut -d\  -f1 ) 
    if [ -e $dupes/$sha ] 
    then
        ln -f $dupes/$sha "$x" 
    else
        ln "$x" $dupes/$sha
    fi
done
0
28.07.2021, 11:36

Теги

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