Как организовать замену дубликатов файлов на симлинки в разных каталогах
Модераторы: /dev/random, Модераторы разделов
-
yamah
- Сообщения: 1116
- ОС: Rosa Fresh, Debian, RELS
Как организовать замену дубликатов файлов на симлинки в разных каталогах
Нужна помощь в организации поиска дубликатов файлов.
Отличие от аналогичных тем на форуме:
- Файлы лежат в двух разных, но определенных каталогах (с подкаталогами), находящихся на разных точках мониторования, у которых общим будет только корневой каталог;
- У каждого файла из первого каталога не более одного дубликата файла во втором каталоге;
- В именах подкаталогов первого каталога могут быть пробелы, которые заменять на подчеркивания не хотелось бы;
- Среди файлов из второго каталога могут быть симлинки на файлы из первого;
- Заменить файлы из второго каталога на симлинки аналогичного файла из первого (и не иначе);
- ПО с GUI не подойдет, ибо сервер.
Создавать дополнительные точки монтирования и монтировать туда эти два каталога, что бы прогонять fdupes, не рационально как-то.
Отличие от аналогичных тем на форуме:
- Файлы лежат в двух разных, но определенных каталогах (с подкаталогами), находящихся на разных точках мониторования, у которых общим будет только корневой каталог;
- У каждого файла из первого каталога не более одного дубликата файла во втором каталоге;
- В именах подкаталогов первого каталога могут быть пробелы, которые заменять на подчеркивания не хотелось бы;
- Среди файлов из второго каталога могут быть симлинки на файлы из первого;
- Заменить файлы из второго каталога на симлинки аналогичного файла из первого (и не иначе);
- ПО с GUI не подойдет, ибо сервер.
Создавать дополнительные точки монтирования и монтировать туда эти два каталога, что бы прогонять fdupes, не рационально как-то.
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
-
watashiwa_daredeska
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Как организовать замену дубликатов файлов на симлинки в разных каталогах
Хм… А зачем дополнительные точки монтирования? Что мешает гонять fdupes прямо на этих?
Мои розовые очки
-
yamah
- Сообщения: 1116
- ОС: Rosa Fresh, Debian, RELS
Re: Как организовать замену дубликатов файлов на симлинки в разных каталогах
watashiwa_daredeska писал(а): ↑19.01.2012 09:40Хм… А зачем дополнительные точки монтирования? Что мешает гонять fdupes прямо на этих?
Что-то действительно ступил.
Часть проблемы решил:
Код: Выделить всё
fdupes -r -1 <каталог 1> <каталог 2> | while read LINE; do ln -s -f $LINE; doneНо осталась проблема с именами каталогов содержащих пробел.
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
-
/dev/random
- Администратор
- Сообщения: 5456
- ОС: Gentoo
Re: Как организовать замену дубликатов файлов на симлинки в разных каталогах
yamah писал(а): ↑19.01.2012 10:38Часть проблемы решил:
Код: Выделить всё
fdupes -r -1 <каталог 1> <каталог 2> | while read LINE; do ln -s -f $LINE; done
Но осталась проблема с именами каталогов содержащих пробел.
Код: Выделить всё
... | while read -r; do ln -s -f "$REPLY"; done-
yamah
- Сообщения: 1116
- ОС: Rosa Fresh, Debian, RELS
Re: Как организовать замену дубликатов файлов на симлинки в разных каталогах
/dev/random писал(а): ↑19.01.2012 10:41Код: Выделить всё
... | while read -r; do ln -s -f "$REPLY"; done
Код: Выделить всё
fdupes -r -1 ~/11/test/1 ~/11/test/2 | while read -r; do ln -s -f "$REPLY"; doneСоздает ссылку в текущем каталоге на объект с адресом "/home/<user>/11/test/1/file1 /home/<user>/11/test/2/11/file2", то есть на то, что выводит fduples.
Если путь с пробелом, то адрес создается файсл с симлинком на "/home/<user>/11/test/1/1\ 1/file1 /home/<user>/11/test/2/11/file2" (Это для файлов "/home/<user>/11/test/1/1 1/file1" "/home/<user>/11/test/2/11/file2")
UPD:
Поизвращатся в подсчете количества пробелов в строке и порезать на две подстроки по последнему пробелу?
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
-
/dev/random
- Администратор
- Сообщения: 5456
- ОС: Gentoo
Re: Как организовать замену дубликатов файлов на симлинки в разных каталогах
Да, ошибся. Мне показалось, что вам в текущем и надо, и что вы указали -f в fdupes.
В таком случае попробуйте убрать -1 в fdupes и читать строки отдельными вызовами read.
-
watashiwa_daredeska
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Как организовать замену дубликатов файлов на симлинки в разных каталогах
А зачем опция '-1'?yamah писал(а): ↑19.01.2012 10:38Часть проблемы решил:
Код: Выделить всё
fdupes -r -1 <каталог 1> <каталог 2> | while read LINE; do ln -s -f $LINE; done
Но осталась проблема с именами каталогов содержащих пробел.
Код: Выделить всё
fdupes -r /master /slave \
| while read line; do
if [ -z "$line" ]; then
src=
elif [ -z "$src" ]; then
src="$line"
else
rm "$line"
ln -s "$src" "$line"
fi
doneМои розовые очки
Спасибо сказали:
-
yamah
- Сообщения: 1116
- ОС: Rosa Fresh, Debian, RELS
Re: Как организовать замену дубликатов файлов на симлинки в разных каталогах
Изначально пытался упростить команду.
Тем более, что для имен файлов не содержащих пробелов (как в самом имени, так и в полном пути) работает.
watashiwa_daredeska писал(а): ↑19.01.2012 11:38Если симлинки нужны с относительными путями, то будет чуть позаковыристей.Код: Выделить всё
fdupes -r /master /slave \ | while read line; do if [ -z "$line" ]; then src= elif [ -z "$src" ]; then src="$line" else rm "$line" ln -s "$src" "$line" fi done
Спасибо. Все сработало.
Ну и еще вопрос. Разве нельзя эту конструкцию
Код: Выделить всё
rm "$line"
ln -s "$src" "$line"заменить на
Код: Выделить всё
ln -s -f "$src" "$line"?
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
-
watashiwa_daredeska
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Как организовать замену дубликатов файлов на симлинки в разных каталогах
Можно.yamah писал(а): ↑19.01.2012 12:12Ну и еще вопрос. Разве нельзя эту конструкцию
Код: Выделить всё
rm "$line" ln -s "$src" "$line"
заменить на
Код: Выделить всё
ln -s -f "$src" "$line"
Мои розовые очки