Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Pfade und Dateinamen kürzen

87 views
Skip to first unread message

Stefan H.

unread,
Aug 7, 2023, 3:59:15 AM8/7/23
to
Hallo,

unter Windows ist es möglich Pfade und Dateinamen länger als 256 Zeichen
anzulegen. Leider machen alle mir bekannten Windows-Tools, die solche
Pfade und Dateien inkl. Rechte kopieren sollen mit solchen überlangen
Namen schlapp. Kein Robocopy und keine Powershell kommt mit den
überlangen Namen zurecht.

Deswegen kam bei uns die Idee auf, ob man einen Server nicht temporär
mit Linux booten könnte, denn da gibt es die Begrenzung ja nicht, die
entsprechende HDD mounten und dann mit einem Script die Pfade kürzen
könnte; z.B. immer an der 20. Stelle.


Beispiel: Aus
E:\MGH\File\Export\XYZZ\Laube\Alt\Wasserpark und Hotel
Wasserpark\Subunternehmer\Hausmann
26_04_2016_Dateien\29.04.2016\Wasserpark\Obergeschoss\VORABZUG_UNGEPRUFT__16627_Kuche_Flow_Rider_EP_Wasserpark_
Kuche_Obergeschoss_Ablaufplan_VORABZUG_UNGEPRUFT Einrichtung (00).pdf

soll werden:

E:\MGH\File\Export\XYZZ\Laube\Alt\Wasserpark und
Hotel\Subunternehmer\Hausmann
26_04_2016_\29.04.2016\Wasserpark\Obergeschoss\VORABZUG_UNGEPRUFT E.pdf

Hier mal ins unreine geschrieben. Damit kriege ich leider die
Dateierweiterung nicht geregelt; dafür fehlt mir noch eine Idee.

abhier=/mnt/WindowsHDD
pfadtiefe=7

i=1
while [ $i -lt $pfadtiefe ] ; do
find $abhier -type d -maxdepth $i -print | while read file
do
m=`echo "$file" | cut nach 20 Zeichen (wie man das auch immer macht)`
if [ -e "$m" ]
then
echo "$m schon vorhanden"
else
mv "$file" "$m"
fi
done
i=$(($i+1))
done

find $abhier -type f -print | while read file
do
m=`echo "$file" | cut nach 20 Zeichen (wie man das auch immer macht)`
if [ -e "$m" ]
then
echo "$m schon vorhanden"
else
mv "$file" "$m"
fi
done


Hat jemand eine Idee wie man das machen könnte?

Viele Grüße
Stefan

Marcus Röckrath

unread,
Aug 7, 2023, 6:20:03 AM8/7/23
to
Hallo Stefan,

Stefan H. wrote:

> Deswegen kam bei uns die Idee auf, ob man einen Server nicht temporär
> mit Linux booten könnte, denn da gibt es die Begrenzung ja nicht, die
> entsprechende HDD mounten und dann mit einem Script die Pfade kürzen
> könnte; z.B. immer an der 20. Stelle.
>
>
> Beispiel: Aus
> E:\MGH\File\Export\XYZZ\Laube\Alt\Wasserpark und Hotel
> Wasserpark\Subunternehmer\Hausmann
>
26_04_2016_Dateien\29.04.2016\Wasserpark\Obergeschoss\VORABZUG_UNGEPRUFT__16627_Kuche_Flow_Rider_EP_Wasserpark_
> Kuche_Obergeschoss_Ablaufplan_VORABZUG_UNGEPRUFT Einrichtung (00).pdf
>
> soll werden:

Google wirft mit "linux shorten file names" viele Treffer aus, z. B.:

https://gist.github.com/derofim/f9335dffac113f7c2b75123cfb9b410a

--
Gruß Marcus

Marcus Röckrath

unread,
Aug 7, 2023, 11:40:02 AM8/7/23
to
Hallo Stefan,

Marcus Röckrath wrote:

>> Beispiel: Aus
>> E:\MGH\File\Export\XYZZ\Laube\Alt\Wasserpark und Hotel
>> Wasserpark\Subunternehmer\Hausmann
>>
>
26_04_2016_Dateien\29.04.2016\Wasserpark\Obergeschoss\VORABZUG_UNGEPRUFT__16627_Kuche_Flow_Rider_EP_Wasserpark_
>> Kuche_Obergeschoss_Ablaufplan_VORABZUG_UNGEPRUFT Einrichtung (00).pdf
>>
>> soll werden:
>
> Google wirft mit "linux shorten file names" viele Treffer aus, z. B.:
>
> https://gist.github.com/derofim/f9335dffac113f7c2b75123cfb9b410a

Das behandelt allerdings Pfad und Dateinamen (ohne Extension) als Ganzes,
trennt also nicht Pfad und Dateinamen und kürzt eventuell über Pfadgrenzen
hinweg.

Hier mal ein paar Bash-Stringoperationen als Beispiel:

Datei:
fp="./src/samba-4.17.10/selftest/manage-ca/CA-samba.example.com/DCs/addcsmb1.addom2.samba.example.com/DC-addcsmb1.addom2.samba.example.com-S06-openssl.cnf"

Pfad:
p="${fp%/*}" ; echo $p
./src/samba-4.17.10/selftest/manage-ca/CA-samba.example.com/DCs/addcsmb1.addom2.samba.example.com

Dateiname mit Extension
f="${fp##*/}" ; echo $f
DC-addcsmb1.addom2.samba.example.com-S06-openssl.cnf

Dateiname ohne Extension und dann auf 20 Zeichen gekürzt:
b="${f%.*}" ; echo $b ; s=${b:0:20} ; echo $s
DC-addcsmb1.addom2.samba.example.com-S06-openssl
DC-addcsmb1.addom2.s

Extension:
e="${f##*.}" ; echo $e
cnf

Neuzusammensetzen eventuell wie im Link als Ziel für mv:
echo ${p}/${s}.${e}
./src/samba-4.17.10/selftest/manage-ca/CA-samba.example.com/DCs/addcsmb1.addom2.samba.example.com/DC-addcsmb1.addom2.s.cnf

--
Gruß Marcus

Uwe Z.

unread,
Aug 7, 2023, 2:53:04 PM8/7/23
to
Moin!

Am 07.08.2023 um 09:59 schrieb Stefan H.:
> unter Windows ist es möglich Pfade und Dateinamen länger als 256 Zeichen
> anzulegen. Leider machen alle mir bekannten Windows-Tools, die solche
> Pfade und Dateien inkl. Rechte kopieren sollen mit solchen überlangen
> Namen schlapp. Kein Robocopy und keine Powershell kommt mit den
> überlangen Namen zurecht.

Magst du mal den genauen Anwendungsfall und die Umgebung näher
beschreiben? Das Problem an sich ist ja altbekannt, aber das z.B.
Robocopy sich dagegen sperren sollte, ist mir neu.

> Deswegen kam bei uns die Idee auf, ob man einen Server nicht temporär
> mit Linux booten könnte, denn da gibt es die Begrenzung ja nicht, die
> entsprechende HDD mounten und dann mit einem Script die Pfade kürzen
> könnte; z.B. immer an der 20. Stelle.

Wäre das nicht eine Anwendung, die auch Powershell leisten könnte, also
die ohne Reboot in ein anderes System auskäme? Vor allem, wenn das
schrittweise geschieht (also erst die oberste Ordnerebene, dann die
nächste, usw. werden gekürzt).

--
Viele Grüße
Uwe

Stefan H.

unread,
Aug 8, 2023, 4:34:06 AM8/8/23
to
Hallo Uwe,

wie kommst Du auf die Idee, dass Robobcopy oder die Powershell da keine
Probleme mit haben?

Hier mal die Fehlermeldung aus der Powershell:

Get-ChildItem : Der angegebene Pfad und/oder Dateiname ist zu lang. Der
vollständig qualifizierte Dateiname muss
kürzer als 260 Zeichen und der Pfadname kürzer als 248 Zeichen sein.
In E:\MGH\File\ORGuINF\Batches\zu-lange-pfade.ps1:15 Zeichen:16
+ $dirlist = Get-ChildItem "$Verzeichnis" -recurse | foreach
{$_.Fullname}
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ReadError:
(E:\MGH\File\Mar...ie_ein_Bild_aus:String) [Get-ChildItem],
PathTooLongExcept
ion
+ FullyQualifiedErrorId :
DirIOError,Microsoft.PowerShell.Commands.GetChildItemCommand


Viele Grüße
Stefan


Am 07.08.23 um 20:52 schrieb Uwe Z.:

Christian Ziemski

unread,
Aug 8, 2023, 6:26:53 AM8/8/23
to
Am 08.08.23 um 10:34 schrieb Stefan H.:
>
> Hier mal die Fehlermeldung aus der Powershell:
>
> Get-ChildItem : Der angegebene Pfad und/oder Dateiname ist zu lang. Der
> vollständig qualifizierte Dateiname muss
> kürzer als 260 Zeichen und der Pfadname kürzer als 248 Zeichen sein.

Hast Du schon die Pfadbeschränkung aufgehoben?

Siehe z.B. hier:

https://www.tecchannel.de/a/pfadbeschraenkung-auf-260-zeichen-in-windows-aufheben,3277832

Stefan H.

unread,
Aug 8, 2023, 7:19:04 AM8/8/23
to
Hi Christian,

> Hast Du schon die Pfadbeschränkung aufgehoben?
>
> Siehe z.B. hier:
>
> https://www.tecchannel.de/a/pfadbeschraenkung-auf-260-zeichen-in-windows-aufheben,3277832

würde ich gerne, aber dazu müssten die Dateien erst umgezogen werden.
Die GPU / der Registry-Eintrag hilft bei 2012R2 noch nichts...

Viele Grüße
Stefan
0 new messages