Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Wie erstellt man automatisch Hardlinks?

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Sonstiges
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Mekki
Gast





BeitragVerfasst am: 16. Mai 2004 13:54   Titel: Wie erstellt man automatisch Hardlinks?

Ich möchte automatisch Hardlinks anlegen.
Zum Beispiel von allen Dateien im Ordner mydata einen Hardlink nach public.

ls -1 /home/me/mydata | ln /public/*
 

jochen
prolinux-forum-admin


Anmeldungsdatum: 14.01.2000
Beiträge: 699
Wohnort: Jülich

BeitragVerfasst am: 16. Mai 2004 17:14   Titel:

Ne, so wie in Deinem Beispiel geht's nicht. Versuch mal folgendes:
Code:
cd /public
ls  /home/me/mydata | while read FILE ; do
    ln $FILE
done
Wenn ln mit nur einem Argument aufgerufen wird, erstellt es im aktuellen Verzeichnis einen Link gleichen Namens (basename $FILE), der auf das Origonal-File zeigt. Allerdings ist die Unterscheidung in Original und Link bei Hardlinks müssig. Auch die Option "-1" zu ls ist unnötig, weil die automataisch gesetzt wird, wenn der Output von ls nicht an ein Terminal geht.

Jochen
_________________
Die grösste Lüge der EDV? "Mal eben..."
 
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen

Entfernt



Anmeldungsdatum: 22.07.1999
Beiträge: 149

BeitragVerfasst am: 16. Mai 2004 18:55   Titel:

Irgenwie ist mir diese while read Form in letzter Zeit immer öfter untergekommen. Warum nicht das:

Code:
for i in *; do ln "$i"; done


Im Übrigen gibt es bei Hardlinks kein Original und kein nicht-Original. Die sind identlisch, es ist auch egal, welches man löscht. Es sind halt zwei Namen für dieselbe Datei.
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden

jochen
prolinux-forum-admin


Anmeldungsdatum: 14.01.2000
Beiträge: 699
Wohnort: Jülich

BeitragVerfasst am: 16. Mai 2004 19:48   Titel:

Gründe gegen "for FILE in *":
  • Whitespace in Dateinamen trennen (je nach Shell) die Verarbeitung einer Datei in mehrere Schleifendurchläufe mit jeweils einem Teil des Dateinamens auf, was natürlich nicht funktioniert (zugegebermassen müsste man dann bei der "while read-Methode noch mit IFS basteln, aber einzelne Blanks im Dateinamen funktionieren auch so)
  • Wenn einige tausend Dateien im Verzeichnis liegen, platzt der Shell die Argument List für die for-schleife. Kann bei der "while read"-Methode nicht passieren, da Name für Name durch die Pipe läuft.

Gerade das Whitespace-Argument wird im Zeitalter bequemer Desktops immer wichtiger.

Jochen
_________________
Die grösste Lüge der EDV? "Mal eben..."
 
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen

Schlachtruf



Anmeldungsdatum: 10.05.2004
Beiträge: 4

BeitragVerfasst am: 17. Mai 2004 7:47   Titel:

jochen hat folgendes geschrieben::
Gründe gegen "for FILE in *":
[list][*]Whitespace in Dateinamen trennen (je nach Shell) die Verarbeitung einer Datei in mehrere Schleifendurchläufe mit jeweils einem Teil des Dateinamens auf, was natürlich nicht funktioniert (zugegebermassen müsste man dann bei der "while read-Methode noch mit IFS basteln, aber einzelne Blanks im Dateinamen funktionieren auch so)
Jochen


Wenn man die Variable in Anführungszeichen setzt ( "$i" ), behebt sich das Problem mit den Leerstellen.
 
Benutzer-Profile anzeigen Private Nachricht senden

jochen
prolinux-forum-admin


Anmeldungsdatum: 14.01.2000
Beiträge: 699
Wohnort: Jülich

BeitragVerfasst am: 17. Mai 2004 8:58   Titel:

So, nach ein paar Tests muss ich mich teilweise korrigieren. Confused

Das Whitespace-Problem existiert so nicht mehr - zumindest, wenn man auf einigermassen aktuellen UNIX-Varianten arbeitet. bash und ash machen es richtig, die sh von Solaris 8 auch. Aber ich könnte schwören, dass ich Shellskripte wegen genau dieses Problems umgestellt habe... Das ist allerdings auch schon ein paar Jahre her. Noch dazu liefen die grösstenteils unter SCO UNIX (OpenDesktop, OpenServer), von dem ich auch schon damals nicht die beste Meinung hatte. Mag sein, dass ich da einen Bug/ein Misfeature von SCO UNIX verallgemeinert habe.

Ich nehme also alles zurück und behaupte das Gegenteil! Smile

Allerdings ist mein anderes Argument, dass durch das Sternchen bei grossen Directories die Kommandozeile platzen kann, immer noch gültig! Zugegebenermassen ist der Buffer in der bash mittlerweile mit 32KB recht gross, aber man weiss ja nie... Cool

Jochen
_________________
Die grösste Lüge der EDV? "Mal eben..."
 
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen

Gast






BeitragVerfasst am: 17. Mai 2004 10:55   Titel:

jochen hat folgendes geschrieben::
Zugegebenermassen ist der Buffer in der bash mittlerweile mit 32KB recht gross, aber man weiss ja nie... Cool

Jochen


Was ist noch die Aufgabe des Puffers neben der Aufnahme von Variableninhalten?

MfG
 

jochen
prolinux-forum-admin


Anmeldungsdatum: 14.01.2000
Beiträge: 699
Wohnort: Jülich

BeitragVerfasst am: 17. Mai 2004 14:34   Titel:

Der Buffer nimmt nicht Variableninhalte auf, sondern die Kommandozeile. Wenn Du zum Beispiel ein
Code:
ls $LS_OPTION /tmp/*
tippst, macht die Shell ein
Code:
ls -al /tmp/datei1 /tmp/datei2 /tmp/datei3 ...
daraus (wenn in der Shellvariablen LS_OPTION ein "-al" drin steht). Und dazu wird intern ein Buffer verwendet, der 32KB gross ist. Beantwortet das Deine Frage?

Jochen
_________________
Die grösste Lüge der EDV? "Mal eben..."
 
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen

Scory



Anmeldungsdatum: 16.04.2004
Beiträge: 188

BeitragVerfasst am: 17. Mai 2004 17:14   Titel:

Warum einfach wenns auch schwer geht ... wie wäre es mit:

ln /home/me/mydata/* /public
 
Benutzer-Profile anzeigen Private Nachricht senden

Mekki
Gast





BeitragVerfasst am: 17. Mai 2004 21:08   Titel:

Vielen Dank:-)
Es hat funktioniert.
 

Schlachtruf



Anmeldungsdatum: 10.05.2004
Beiträge: 4

BeitragVerfasst am: 21. Mai 2004 9:20   Titel:

jochen hat folgendes geschrieben::
Der Buffer nimmt nicht Variableninhalte auf, sondern die Kommandozeile. Wenn Du zum Beispiel ein
Code:
ls $LS_OPTION /tmp/*
tippst, macht die Shell ein
Code:
ls -al /tmp/datei1 /tmp/datei2 /tmp/datei3 ...
daraus (wenn in der Shellvariablen LS_OPTION ein "-al" drin steht). Und dazu wird intern ein Buffer verwendet, der 32KB gross ist. Beantwortet das Deine Frage?

Jochen


Ja, danke!
 
Benutzer-Profile anzeigen Private Nachricht senden

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Sonstiges Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy