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
()
Ответ на: комментарий от Deleted

Длину файлов хотелось бы поболе 255 байт.

Нахера? Что ты там собрался писать?

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от 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 ★
()
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.