LINUX.ORG.RU
Ответ на: комментарий от SR_team

Длиной пути? Насколько я знаю, не поправили. У венды символы, в линуксе байты. Т.е. в несколько раз меньше на практике. Но в то же время в линуксе практически бесконечная вложенность возможна, а в венде так низя.

anonymous
()
Ответ на: комментарий от anonymous

Я уже больше 15 лет пользуюсь исключительно reiserfs, все ОК!

anonymous
()
Ответ на: комментарий от anonymous

А ты на koi8-r?

В винде юникод двухбайтовый, в стандартном api длинна пути до 260 символов, с ntfs длинна имени 255 символов.

Длинные названия часто у старой художественной литературы былы, у не художественной тоже часто названия не короткие.

Т.к. В линукс ограничение имени почти у всех ФС 255 байт, то русских с юникодом в худшем случае 127.

Я натыкался пару раз на торенты, сделанные в винде, с длинными именами. Там бывали длинные имена книг, или эпизоды сериала именовались по схеме - полное название сериала + полное название серии. А торент-клиент переименовать тогда не умел.

boowai ★★★★
()
Ответ на: комментарий от webmonkey

Тебе уже объяснили: если в одном месте удалишь файл, он удалится и в другом! Это некошерно.

Ну, и самое главное: линукс изначально позиционировался как свободная от анального огораживания система. И если я не могу выстрелить себе в ногу, это уже анальное огораживание → линукс — говно!

anonymous
()
Ответ на: комментарий от boowai

А ты на koi8-r?

Естественно! Я ж не китаец и не гомосек.

Длинные названия часто у старой художественной литературы были

Кто в своем уме называет файлы кириллицей, да еще и с пробелами, да еще и дает файлу полное название книги?

натыкался пару раз на торенты, сделанные в винде, с длинными именами

тоже натыкался. Похоже, вантузятники — это особый вид олигофренов. Среднее между дебилами и имбецилами. Из-за этих уродов приходится, чтобы не ломать раздачу, делать дерево симлинков, автоматом декодированных в транслит с заменой запрещенных символов на подчеркивание.

anonymous
()
Ответ на: комментарий от anonymous

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

anonymous
()
Ответ на: комментарий от anonymous

Уж хардлинки на директории — очевидная фича! И если она была раньше, на кой хрен ее выкинули из системы?

ХОЧУУУУУ!!!

anonymous
()
Ответ на: комментарий от anonymous

Черт, до меня дошло: выкидывание хардлинков на директории — это самое первое из западлостроения подлеца поцтеринга! Уже тогда он лелеял надежду уничтожить линукс, превратив его в никчемное говно из духа мастдайки или гей-оси, где нет кастомизируемости, нет юниксвейности, зато из всех щелей торчат анальные зонды!!!1

anonymous
()
Ответ на: комментарий от crutch_master

пусть в acl тег пишет длинное имя, там 4кб что ли

anonymous
()
Ответ на: комментарий от Deleted

Если ты не заметил, то ключ -r обрабатывает директории рекурсивно. При этом сами директории копируются, а файлы — линкуются.

А вот тут обсуждали rmlint: rmlint - помогите осилить. Это такая утилита для дедупликации файлов. Умеет делать из нескольких копий файла набор хардлинков на один и тот же экземпляр данных.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Для этого есть fdupes. Или мой скрипт:

#!/bin/sh
#	2 минуты 12.38 секунд  на 12'989 файлов общим размером 10'026'786'125 байт
#		(стало: 9'919'093'813 байт)
#	1 минута 13.00 секунд на 10'399 файлов общим размером 27'171'656'169 байт
#		(стало: 26'401'660'287 байт)
#	1 минута 17.82 секунд на 8'686 файлов общим размером 11'474'216'791 байт
#		(стало: 11'131'537'062 байт)
#	3 минуты 19.77 секунд на 16'257 файлов общим размером 70'697'892'519 байт
#		(стало: 69'132'667'051 байт)
#
FILELIST="/tmp/filelist_4_mysql"
SQLFILE="/tmp/tmp_4_mysql"
OUTP="/tmp/double_files"
DB="/tmp/filelistdb"

STEP_CNTR=0
#DUP_CNTR=0

if [ "$1" = "-h" ]; then
        echo "Usage: $(basename $0) [-h|-d|-l]"
        echo -e "\t-h\tshow this help"
        echo -e "\t-l\tmake hardlinks for duplicates"
        echo -e "\t-d\tdelete duplicates"
        exit 1
fi

function SQL(){
        echo -e $* | sqlite3 $DB
}

function SQLF(){
        sqlite3 $DB < $SQLFILE
}


function Step(){
        STEP_CNTR=$[$STEP_CNTR + 1 ]
        echo -e "\n\e[1;32m$STEP_CNTR\t\t$*...\e[0m"
}

rm -f $FILELIST $SQLFILE $OUTP $DB

Step "Init database"
SQL "create table files(filename string, filesize integer); create table dups(filename string, filemd5 long);"

Step "Making list of files"
find  -type f -printf "%p\t%s\n" > $FILELIST

Step "Finding files with same size"
cat > $SQLFILE << EOF
delete from files;
.mode tabs
.import /tmp/filelist_4_mysql files
delete from files where filesize in (select filesize from (select filesize,count(*) c from files group by filesize having c = 1) T);
delete from files where filesize = 0;
select filesize from files group by filesize;
EOF

SQLF > $OUTP

cat > $SQLFILE << EOF
delete from dups;
.mode tabs
.import /tmp/filelist_4_mysql dups
delete from dups where filemd5 in (select filemd5 from (select filemd5,count(*) c from dups group by filemd5 having c = 1) T);
select filename from dups group by filemd5;
EOF

Step "Finding duplicates"
while read SIZE
do
        rm -f $FILELIST
        SQL "select filename from files where filesize = $SIZE ;" | while read FILE
        do
                MD=$(sha1sum -b "$FILE" | awk '{print $1}' 2>/dev/null);
                if [ "$MD" != "" ]; then
                        echo -e "$FILE\t$MD" >> $FILELIST
                else
                        echo -e "\e[1;31;40mCant read MD5 of $FILE\e[0m\nTrace:"
                        SQL "select filename from files where filesize = $SIZE;" 
                fi
        done
        SQLF | while read FILE
        do
                echo -e "\n\e[1;41;33m$FILE\e[36m has dublicates:\e[0m"
                SQL "select filename from dups where filemd5 = (select filemd5 from dups where filename = \"$FILE\") AND filename != \"$FILE\";"  | while read D_FILE
                do
                        echo -e "\e[1;32;40m$D_FILE\e[0m"
                        [ "$1" = "-d" ] && rm -f "$D_FILE" && echo "deleted"
                        [ "$1" = "-l" ] && ln -f "$FILE" "$D_FILE" && echo "linked"   #|| ln -fs "$FILE" "$D_FILE" || echo -e "\e[1;31;40merror linking $FILE to $D_FILE!!!\e[0m"
                done
        done
done < $OUTP

Step "Deleting trash"
#echo "delete from files; delete from dups;" 
rm -f $FILELIST $SQLFILE $OUTP $DB

anonymous
()
Ответ на: комментарий от Deleted

Ты явно придумал какую-то жуткую дичь. К счастью, ты нам про неё не расскажешь, и мы не расскажем тебе, что в твоей идее не так.

i-rinat ★★★★★
()
Ответ на: комментарий от anonymous

Я не знаю файловых систем с максимальной длиной пути в 255 символов!

в вынде 260 или около того

в линуксе 4k

и то и другое не на абсолютный путь, а на относительный

MyTrooName ★★★★★
()
Ответ на: комментарий от MyTrooName

Только если это системные файлы. А при чем здесь-то рут? Я могу от рута сделать хардлинк на нужные мне директории, а потом радоваться...

anonymous
()

Я пользуюсь cp -rl для подобного.

Legioner ★★★★★
()
Ответ на: комментарий от MyTrooName

В винде то ли 32000 то ли нет ограничений. Это на уровне ядра. На уровне приложений раньше было ограничение в 260 символов, потом его убрали, но до сих пор многие приложения не адаптированы. Поэтому это не совсем верное утверждение.

Legioner ★★★★★
()
Ответ на: комментарий от anonymous

Ух, какой строгий учитель!

Ты сам-то эти маны читал?

И зачем ты симлинки сюда приплёл?

И ты до сих пор не рассказал задачу

webmonkey
()
Ответ на: комментарий от i-rinat

Нет, моя дичь красива и элегантна

Deleted
()
Ответ на: комментарий от webmonkey

Ты просто несешь пургу. Попробуй сам: создай файл и хардлинк на него. Удали файл. Хардлинк останется. На то он и хардлинк, бестолочь!

anonymous
()
Ответ на: комментарий от anonymous

Хардлинки неудобны тем что метаданные на все файлы в 1 варианте. Да и изменение файла изменит все копии. Хотя вроде может и не изменить когда программа сохраняет файл заново. В общем, симлинки ftw, с ними ты всегда помнишь что твой файл ссылается в другое место. Хардлинки нужны только там где они нужны.

anonymous
()
Ответ на: комментарий от anonymous

Да и изменение файла изменит все копии

Так это фича. Хардлинк, по сути - просто другое имя.

Хардлинки нужны только там где они нужны.

Сказал как ртом!

Deleted
()
Ответ на: комментарий от anonymous

тогдась используй cow люк !!

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

pfg ★★★★★
()
Ответ на: комментарий от anonymous

если в одном месте удалишь файл, он удалится и в другом!

Так с хардлинком на директорию ведь будет тоже самое.

# uname -a
SunOS ******** 5.10 Generic_150400-61 sun4v sparc SUNW,SPARC-Enterprise-T5120
# mkdir dir1
# >dir1/file1
# >dir1/file2
# link dir1 dir2
# ls -li
    100964 drwxr-x---   3 root     root         512 Jul 17 10:37 dir1
    100964 drwxr-x---   3 root     root         512 Jul 17 10:37 dir2

Видим, что у обоих директорий (dir1 и dir2) одинаковый i-node, т.е. это в самом деле хардлинк.

Теперь удаляем файл в одной директории:

# ls -li dir1
    100970 -rw-r-----   1 root     root           0 Jul 17 10:37 file1
    100972 -rw-r-----   1 root     root           0 Jul 17 10:37 file2
# ls -li dir2
    100970 -rw-r-----   1 root     root           0 Jul 17 10:37 file1
    100972 -rw-r-----   1 root     root           0 Jul 17 10:37 file2
# rm dir1/file1
# ls -li dir2
    100972 -rw-r-----   1 root     root           0 Jul 17 10:37 file2

В результате он удалился из обоих директорий.

bigbit ★★★★★
()
Последнее исправление: bigbit (всего исправлений: 1)
Ответ на: комментарий от pfg

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

Вообще-то в юзкейсе «создал копию через cow и изменил ее», копия весит как оригинал, т.к. при изменение будет созданая измененная копия всего файла, а не только его измененной части.
По крайней мере так в BTRFS.

SR_team ★★★★★
()
Последнее исправление: SR_team (всего исправлений: 1)
Ответ на: комментарий от SR_team

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

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

pfg ★★★★★
()
Ответ на: комментарий от anonymous

Нет ты. Твой пример — говно.

Попробуй сам: создай файл и хардлинк на него. Измени файл. Хардлинк изменится. На то он и хардлинк, бестолочь!

Точнее, изменится не хардлинк, а инод, на который они указывают.

webmonkey
()
Ответ на: комментарий от anonymous

а если ты отмонтируешь директорию, исходная ведь тоже останется.

webmonkey
()
Ответ на: комментарий от webmonkey

Идиот!

В этом и прелесть! Мне именно такое поведение и нужно: чтобы один и тот же файл хранился в N местах и изменение его в одном месте приводило к немедленному изменению в другом. А вот удаление в одном месте к удалению в другом не приводило.

Но дерево файлов затрахаешься хардлинкать! Поэтому нужны хардлинки на директории.

anonymous
()
Ответ на: комментарий от anonymous

дык, хардлинк на диру запрещен програмно, чтобы нельзя было создавать зацикленные диры.
это «элемент защиты тебя от тебя, дурачок» :)

pfg ★★★★★
()
Последнее исправление: pfg (всего исправлений: 1)
Ответ на: комментарий от Deleted

Нет, ты не прав

Брал 4гб фалй и делал копию с --reflink=auto, cow, на сколько мне известно. Потом изменял в копии 1 байт и файл закрывался очень долго, по времени сравнимо с копированием без --reflink

SR_team ★★★★★
()
Ответ на: комментарий от pfg

Вот я и говорю: это — нарушение права пользователя выстрелить себе в ногу. А по-русски — анальный зонд.

И если линукс — не говно, зондов там быть не может.

anonymous
()
Ответ на: комментарий от SR_team

Делать глобальные выводы из 1 случая, да ещё и с ощущениями вместо точных данных - это мда

Deleted
()
Ответ на: комментарий от anonymous

на таки да, ограничение прав рядового пользователя из той же системы, может он захочет чего-нить такого полезно-рутового сотворить на системе ??

или напряжение на процессоре повысить в два раза , чтобы игрушка в два раза быстрее гоняла ??

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

да и вообще чего это я тут порю - берешь исходники ядра и корежишь отверткой под себя.
PROFIT !!

pfg ★★★★★
()
Последнее исправление: pfg (всего исправлений: 1)
Ответ на: комментарий от Deleted

Случая было 2. И тот что я привел был сделан специально, что бы убедиться. Но да, никаких точных замеров времени записи я не делал, и что там в блоках творится не проверял.

P.S. Хорошо, если я ошибся, потому что перезапись всего файла меня не радует, и когда я тыкал палкой cow, я ожидал именно перезаписи части файла, а не всей копии.

SR_team ★★★★★
()
Последнее исправление: SR_team (всего исправлений: 1)
Ответ на: комментарий от pfg

кстати да. Байт менял где-то в начале, но вроде менял, а не вставлял новый.

SR_team ★★★★★
()
Ответ на: комментарий от anonymous

Нет, идиот тут только ты.

Тебе уже объяснили, что хардлинк — всего лишь дополнительное имя файла, т.е. доп. указатель на соответствующий инод. И когда меняется содержимое этого инода, будь то файл или каталог, все указатели на этот инод выдадут тебе одинаковое содержимое.

Ты бы все же прочел маны, которыми тут разбрасывался.

webmonkey
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.