<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Linux Forum &mdash; Скрипт для обрезания длинных имён файлов]]></title>
	<link rel="self" href="https://linuxforum.ru/extern.php?action=feed&amp;tid=15395&amp;type=atom" />
	<updated>2011-07-29T06:25:19Z</updated>
	<generator>PunBB</generator>
	<id>https://linuxforum.ru/viewtopic.php?id=15395</id>
		<entry>
			<title type="html"><![CDATA[Re: Скрипт для обрезания длинных имён файлов]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=198674#p198674" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Минздрав пишет:</cite><blockquote><p>Есть FAQ по запуску скриптов?</p></blockquote></div><p>1) создаём скрипт с любым именем. Хотя я обычно создаю скрипты с именем *.sh, что-бы самому не путаться.<br />2) в первой (это важно) строке пишем<br /></p><div class="codebox"><pre><code>#!/bin/bash</code></pre></div><p>Я обычно пишу скрипты именно для bash&#039;а. Хотя многие скрипты работают и с более простой оболочкой /bin/sh.<br />3) устанавливаем права доступа. Либо через гуй (скрины делать лень), либо<br /><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh">$ chmod +x script.sh</div><br />4) запускаем<br /><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh">$ ./script.sh</div><br /></p><div class="quotebox"><cite>Минздрав пишет:</cite><blockquote><p>Блин облом. А что нельзя оставлять первые 13 символов и последние заменять, с разрядом до третьего знака?</p></blockquote></div><p>откуда вы взяли такие правила?<br />В MS-DOS файлы именовались по правилу 8.3<br />12345678.123 например.<br />8 символов в имени + 3 символа в расширении, и точка между ними, итого 12 символов. 13 откуда?</p><p>Можно. Если вы мне объясните, на что заменять, и зачем это надо.</p>]]></content>
			<author>
				<name><![CDATA[drBatty]]></name>
				<uri>https://linuxforum.ru/profile.php?id=86</uri>
			</author>
			<updated>2011-07-29T06:25:19Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=198674#p198674</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Скрипт для обрезания длинных имён файлов]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=198571#p198571" />
			<content type="html"><![CDATA[<p>А как этот скрипт запускать?<br />Где директорию указывать в которой обрезаемые файлы лежат?<br />Есть FAQ по запуску скриптов?<br /></p><div class="quotebox"><cite>drBatty пишет:</cite><blockquote><p>правила резки:<br />пункты (4) и (5) повторяются, до ~9, если и такой есть, то программа завершается с ошибкой.</p></blockquote></div><p>Блин облом. А что нельзя оставлять первые 13 символов и последние заменять, с разрядом до третьего знака?</p>]]></content>
			<author>
				<name><![CDATA[Минздрав]]></name>
				<uri>https://linuxforum.ru/profile.php?id=492</uri>
			</author>
			<updated>2011-07-28T17:33:01Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=198571#p198571</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Скрипт для обрезания длинных имён файлов]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=198411#p198411" />
			<content type="html"><![CDATA[<p><strong>зависимости:</strong></p><p>bash.</p>]]></content>
			<author>
				<name><![CDATA[drBatty]]></name>
				<uri>https://linuxforum.ru/profile.php?id=86</uri>
			</author>
			<updated>2011-07-28T06:15:30Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=198411#p198411</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Скрипт для обрезания длинных имён файлов]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=198410#p198410" />
			<content type="html"><![CDATA[<p>правила резки:</p><p>1) полное имя состоит из имени и расширения.<br />2) если имя не больше 8и символов оно оставляется как есть.<br />3) если имя больше, то обрезаются все символы кроме первых 7и, и восьмым вставляется &#039;~&#039;<br />4) если такой файл уже есть, то берётся 6 символов, а 7ым и восьмым ставится ~1<br />5) если такой файл есть, то вставляется ~2<br />6) пункты (4) и (5) повторяются, до ~9, если и такой есть, то программа завершается с ошибкой.</p>]]></content>
			<author>
				<name><![CDATA[drBatty]]></name>
				<uri>https://linuxforum.ru/profile.php?id=86</uri>
			</author>
			<updated>2011-07-28T06:14:16Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=198410#p198410</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Скрипт для обрезания длинных имён файлов]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=198405#p198405" />
			<content type="html"><![CDATA[<p>тут попросили.<br />этот скрипт делает хардлинки (вторые имена) на файлы, и если они слишком длинные их обрезает, например<br /><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh"><br />$ ~/scripts/msdos_name ../TARGET<br />./x/y2/aaaaaaaaaaaaaaaaaaaaaa1.ext<br />mkdir: создан каталог «../TARGET/x/y2»<br />«../TARGET/x/y2/aaaaaaa~.ext» =&gt; «./x/y2/aaaaaaaaaaaaaaaaaaaaaa1.ext»<br />./x/y2/aaaaaaaaaaaaaaaaaaaaaa3.ext<br />«../TARGET/x/y2/aaaaaa~1.ext» =&gt; «./x/y2/aaaaaaaaaaaaaaaaaaaaaa3.ext»<br />./x/y2/aa&nbsp; aaaaa&nbsp; aaaaaaaa&nbsp; &nbsp;aaaa aaa.ext<br />«../TARGET/x/y2/aa__aaa~.ext» =&gt; «./x/y2/aa&nbsp; aaaaa&nbsp; aaaaaaaa&nbsp; &nbsp;aaaa aaa.ext»<br />./x/y2/f3<br />«../TARGET/x/y2/f3» =&gt; «./x/y2/f3»<br />./x/y2/aaaaaaaaaaaaaaaaaaaaaa2.ext<br />«../TARGET/x/y2/aaaaaa~2.ext» =&gt; «./x/y2/aaaaaaaaaaaaaaaaaaaaaa2.ext»<br />./x/y2/aaaaaaaaaaaaaaaaaaaaaa.ext<br />«../TARGET/x/y2/aaaaaa~3.ext» =&gt; «./x/y2/aaaaaaaaaaaaaaaaaaaaaa.ext»<br /></div></p><br /><div class="codebox"><pre><code>#!/bin/bash

TARGET=&quot;$1&quot;

if [ -z &quot;$TARGET&quot; ]; then
    cat &lt;&lt;EOT
Использование: `basename $0` TARGET
Создание хардлинков на файлы в CWD.
Хардлинки обрезаются по маздайным правилам.
EOT
    exit 70
fi

if [ ! -d &quot;$TARGET&quot; ]; then
    mkdir --parents &quot;$TARGET&quot;
    err=$?
    if [ $err != 0 ]; then
        exit $err
    fi
fi

find . -type f |\
    while read FILE; do
        echo &quot;$FILE&quot;
        DIRNAME=`dirname &quot;$FILE&quot;`
        DIRNAME=&quot;${DIRNAME#./}&quot;
        if [ ! -d &quot;$TARGET/$DIRNAME&quot; ]; then
            mkdir --verbose --parents &quot;$TARGET/$DIRNAME&quot;
            err=$?
            if [ $err != 0 ]; then
                exit $err
            fi
        fi

        BASENAME=`basename &quot;$FILE&quot;`
        EXT=&quot;${BASENAME##*.}&quot;
        if [ &quot;$EXT&quot; = &quot;$BASENAME&quot; ]; then
            EXT=&quot;&quot;
        else
            EXT=&quot;.$EXT&quot;
        fi
        NAME=&quot;${BASENAME%.*}&quot;
        if echo &quot;$NAME&quot; | grep -q &#039; &#039;; then
            NAME=`echo &quot;$NAME&quot; | sed &#039;s/\s/_/g&#039;`
        fi
        LEN_NAME=${#NAME}
        if (( $LEN_NAME &gt; 8 )); then
            NAME1=&quot;${NAME::7}~&quot;
            N=0
            while [ -f &quot;$TARGET/$DIRNAME/$NAME1$EXT&quot; ]; do
                (( N = N + 1 ))
                if [ $N = 10 ]; then
                    echo &quot;невозможно создать ещё один файл&quot;
                    exit 71
                fi
                NAME1=&quot;${NAME::6}~$N&quot;
            done
            NAME=&quot;$NAME1&quot;
        fi
        ln --verbose &quot;$FILE&quot; &quot;$TARGET/$DIRNAME/$NAME$EXT&quot;
        err=$?
        if [ $err != 0 ]; then
            exit $err
        fi
    done</code></pre></div>]]></content>
			<author>
				<name><![CDATA[drBatty]]></name>
				<uri>https://linuxforum.ru/profile.php?id=86</uri>
			</author>
			<updated>2011-07-28T06:09:52Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=198405#p198405</id>
		</entry>
</feed>
