Multible MV und datei finden

M

muemmi

Eroberer
und schon wieder ich

zwei dinge fehlen mir noch.

a) eine mv für verschieden datein

mv *.txt qsp/mischer/*.tank.... das tut es nicht !

ich möchte alle txt woanderhin nach *.tank renamen

b) ich hab da eine ansammlung von dateien

z.b tank123.tank und tank124.tank usw.

wie kralle ich mir eine davon ohne den namen zu wissen (ausßer die endung)
und rename sie zu einem bekannten namen

damit ich sie dann mit einem program bearbeiten kann !
 
a:

Wenn ".txt" nur am Ende des Filenamen vorkommt:

Code:
for i in $(find . -iname "*.txt"); do mv $i qsp/mischer/${i/.txt/.tank}; done

edit: Allgemeingültig:

Code:
find . -iname "*.txt" | perl -ple '$file=$_; s/\.txt$/.tank/i; rename $file, "qsp/mischer/$_"'
 
Zuletzt bearbeitet:
zu a)
Code:
for i in *.txt; do mv "$i" qsp/mischer/$(basename "$i" .txt).tank; done

zu b) weiss nicht was du meinst
 
hmmmm

wir erkäre ich jetzt besser b)

also ich bekomme daten von einem messgerät (oder besser eine Waage) geliefert. die stehen in einer datei diese dateien haben verschieden namen
und immer die selbe endung

jetzt muß ich sie einzel anpacken und sie umbenenne in einen bekannten namen
dann wird die datei von einem programm abgerabeitet
dann wird sie verworfen und die nächset ist dran

erklärung

ich migriere von vms auf unix...
ich weiß zwar was ich will aber ich kenn die feinheiten nicht
dummerweise ist es eine shelloberfläche auf windows die nicht so doll viele befehle kennt!
 
zu b) Wenn Dein Programm den Dateinamen als Kommandozeilenparameter akzeptiert, kannst Du es so gestalten:
Code:
for i in *.tank ; do /pfad/zu/Deinem/programm $i ; done

Vor dem 'done' kannst Du noch ein 'rm $i; ' einfuegen, falls die abgearbeitete Datei geloescht werden soll.
 
Hallo
  • 1. Ist das hier ein Unixboard, und somit eigentlich nicht für WindoZe limitierte Dosboxen zuständig
  • 2. Kennt IMHO sogar die Dos pseudo Shell dafür Befehle.
  • 3. Lässt sich sowas in jedem Fall auch mit perl erledigen. Das gibt es auch für Wintendo. Somit bleiben diese Codesnippel portierbar genug.

Wie du dein Problem anzufassen hast steht ja schon oben.
Außerdem gibt es dafür etliche manpages auch im Netz, die solch File bezogene Befehle beschreiben.

Um einen Dateinamen vor der (sogenannten) erweiterung zu expandieren gibt es viele Möglichkeiten.
Einige davon findest du hier im Board.
Mit perl z.B. so
....
$name=~s!.*\.([^.])+$!neu.$1!ig
....
Das in eine Schleife gepackt, und über deinen Prozess für ausgewählte Dateien einfügen.

Andere Varianten stehen oben im Thread.
Willst du die z.b alle in einem Arbeitsverzeichnis haben:
Code:
for I in $(find /home -iname "*txt"); do perl -MFile::Copy -le ' copy $1, "/temp/neu$3" if $ARGV[0]=~m/((.*\/).*(\.[^.]+))$/ig' $I;
here commands in /temp;
...
done
Im og Fall hält die
$1=gesamte Datei mit Pfad
$2= UrsprungsPfad ohne Datei
$3= Dateiendung nach dem letzten Punkt -> hier wohl txt|Txt|TxT...siehe ->>Option i im Regexp.

Du kannst auch gleich File::Find einsetzen,dann sparst du dir die for und find Geschichte. Oder statt copy rename usw. einsetzen.
Das sind Sachen der eigenen programmiertechnischen Creativität ;)

Oder eben oben genannte Alternativen mit reinen Shellmitteln
via Parameterexpansion

Edit:
Zu deinem besagten anonymen Programm:
Wie dieses die Dateienamen erwartet, kann ausser dir niemand wissen.
Also entweder den Inhalt übergeben oder den Namen.

Gruß Wolfgang

PS Eben mal gegoogelt:
Der xcopy-befehl unter deiner pseudo Shell cmd.exe kann das auch!
Dazu sollte ja wenigstens unter dem WintenDosystem eine Hilfe existieren.
 
Zuletzt bearbeitet:

Ähnliche Themen

Prblem mit zeilenweises auslesen von Datei und schreiben nach mysql

ca. 1200 PDF-Dateien auslesen und bestimmte Daten in eine CSV-Datei speichern

Shell vs. PHP

.log dateien umbenennen nach .txt

Script mit Zenity + bei find verzeichnisse ausschliessen

Zurück
Oben