BRAUCH HILFE: Unix Programm zum verschieben von Dateien!

B

Beheaded

Grünschnabel
Hallo!
Ich bin Unix-Einsteiger und brauch jetzt ein Programm, welches mir aus einem Ordner alle Dateien (keine Unterverzeichnisse oder Verzeichnisse) in einen anderen Ordner kopiert. Desweiteren soll dies durch eine Schleife Zeilenweise geschehen (damit man immer sieht, welche Datei gerad rauskopiert wird) und der Dateiname einfach durch das Kürzel .txt erweitert werden.
Kann mir jemand helfen? Bräuchte das bis spätestens Sonntag. :-/
Ich bin so in Not. Bitte verzweifelt um Hilfe.
 
Kuck dir mal

Code:
man find

an.

Noch ein paar Tips:

- Die Suchtiefe (also z.b. keine Unterverzeichnisse) kannst du mit maxdepth begrenzen.

- find kennt den Parameter "exec", damit kannst du z.b. "mv" zum Verschieben und Umbenennen realisieren.

Probiers mal damit, dann sehen wir weiter.
 
Und wie bekomm ich das mit der Schleife hin, das der jede einzeln anzeigt?
Hab kein blassen schimmer. Hab auch schon in meinen Unterlagen rumgeblättert, aber die Schulung ist schon zu lang her, als das ich mich zurechtfinde.
 
Beheaded schrieb:
Bräuchte das bis spätestens Sonntag. :-/
Ich bin so in Not. Bitte verzweifelt um Hilfe.
Hallo,

Hausaufgaben? :devil:
zum Kopieren verwende den Befehl cp.
siehe Link
bei der Geschwindigkeit die heutige Rechner haben, musst du bei einer Ausgabe sehr schnell lesen können.
Daher ist eine Umleitung auf den Bildschirm nicht sinnvoll.
Zum Umbenennen den Befehl mv verwenden

Gruß Lumpi
 
Schuldigt den Doppelpost: vielen Dank für die Antwort auf alle Fälle schon mal. Bin für jeden Tipp dankbar.
 
Hallo,

sieh mal im Bereich "Shell-Scripte".
Dort solltest du geügend Hinweise finden.

Gruß Lumpi

[EDIT] Nur so als Tipp:
Bestätige mal deine Mail zur Anmeldung im UNIXBORD. Nur dann haste die volle Zugangsberechtigung zum Board.
 
Zuletzt bearbeitet:
Ich rate dir zu einem shellscript. Zum lernen rtfm, rtfw.
Die Informationen sollten ausreichen um die Aufgabe zu lösen.
 
1. Danke für den Tipp.^^
2. Also ich hab jetzt schon rausgefunden, das ich mv brauche. Logo.
Wenn ich also eine Datei umbenennen will von dateiname in dateiname.txt, sag ich:
(Pfad wird vorher eingegeben und dann für alle Dateien verwendet)
mv $dateiname $pfad+"/"+$dateiname+"txt" ??

Und als schleife kann ich for nehmen, oder besser while, weil sie ja im falle der ordner leer ist, gar nicht durchlaufen werden muss?!
 
Beheaded schrieb:
1. Danke für den Tipp.^^
2. Also ich hab jetzt schon rausgefunden, das ich mv brauche. Logo.
Wenn ich also eine Datei umbenennen will von dateiname in dateiname.txt, sag ich:
(Pfad wird vorher eingegeben und dann für alle Dateien verwendet)
mv $dateiname $pfad+"/"+$dateiname+"txt" ??

Und als schleife kann ich for nehmen, oder besser while, weil sie ja im falle der ordner leer ist, gar nicht durchlaufen werden muss?!

Wenn ich Deinen ersten Post lese, brauchst Du cp und nicht mv. Am naheliegensden wäre:

Code:
find ... | while read i; do echo $i; cp "$i" "$pfad/${i}txt"; done

Für den Fall, dass spezielle Sonderzeichen in den File-/Ordnernamen existieren, müsste noch -print0 | xargs -n1 -0 zwischengeschalten werden.

Gruss, Xanti

edit: Ich les gerade, dass im Titel was von Verschieben steht. Muddel Dir selber die Lösung um. ;)
 
Zuletzt bearbeitet:
Xanti schrieb:
Wenn ich Deinen ersten Post lese, brauchst Du cp und nicht mv. Am naheliegensden wäre:

Code:
find ... | while read i; do echo $i; cp "$i" "$pfad/${i}txt"; done

Für den Fall, dass spezielle Sonderzeichen in den File-/Ordnernamen existieren, müsste noch -print0 | xargs -n1 -0 zwischengeschalten werden.

Gruss, Xanti

edit: Ich les gerade, dass im Titel was von Verschieben steht. Muddel Dir selber die Lösung um. ;)
Nein, ich soll sie verschieben und nicht kopieren. Sorry, versprochen.
print0 kenn ich nicht. Wie schaltet man das dazwischen und wozu? Bewirkt das einfach, dass Sonderzeichen auch als diese erkannt werden??(

Allet klar:
also anstatt cp dann mv.

EDIT: Vielen Dank nochmal.
 
Mit -print0 gibt find seine Suchergebnisse getrennt durch die ASCII-Null aus. Damit wird gewährleistet, dass im Falle von speziellen Sonderzeichen die Übergabe von find an read funktioniert.

Ohne -print0 gibt find die gefundenen Files als Liste aus, wobei die einzelnen Listenelemente getrennt durch das Newline (\n) sind. Wenn man aber Files hat, die ein Newline in ihren Namen haben (wer auch immer solche Files anlegt), z.B. "file\nname", interpretiert read dies als mehrere Filenamen und dies ist natürlich falsch. Bei -print0 muss man xargs benutzen, da es mit der ASCII-Null-Trennung umgehen kann.

Mehr dazu in man find und man xargs.

Der Befehl würde dann so aussehen:

Code:
find ... -print0 | xargs -0 -n1 | while read i; do ...

Gruss, Xanti

edit: Ich sehe gerade, dass im Fall Newline im Namen das | while read i ... ebenfalls nicht funktionieren würde, dann müsste man mit

Code:
find ... -print0 | xargs -0 -n1 -I% cp % ...

arbeiten.
 
Zuletzt bearbeitet:
Zurück
Oben