Dateien umkopiere

T

tantor

Grünschnabel
Hallo zusammen,

ich habe mal eine Frage wahrscheinlich in Bezug auf das SED-Kommando.

Ich habe eine datei in der in jeder Zeile die Position einer Datei
steht, also in etwa so :

/u/v/test.txt
/m/.../x/test1.txt


nun möchte ich ich mittels SED Kommando, dass mir dieses Kommando die
Zeilen jeweils so auseinandernimmt, dass ich zum einen den Pfad und
zum anderen die Datei habe, denn die entsprechend hier angegebene
Datei möchte ich in ein anderes Verzeichnis kopieren.

Hoffe Sie verstehen was ich meine

also die Datei : /u/v/test.txt soll nachher in /i/sed/ stehen ebenso
die Datei aus /m/.../x/test1.txt

Vielleicht kann mir jemand helfen ? Sollte etwas anderes einfacher
oder sinnvoller als mit SED sein, dann bin ich froh über neue
Ideen...

Wäre super nett, danke.
 
hmm? meinst du so?
weiss nich genau was du willst
auf jedenfall hast du mit dirname das verzeichnis und mit basename den dateinamen
wenn du die nur umkopieren willst reicht in dem fall eigentlich cp $line neuerort


Code:
cat testdatei.txt
/u/v/test.txt
/m/.../x/test1.txt
Code:
cat testdatei.txt | while read line
do
cp $line neuerort

done

exit
 
Zuletzt bearbeitet:
Hallo
Wenn ich dich richtig verstehe, stehen in dieser Datei nur
/Pfade/dateiname

Du möchtest diese Dateien kopieren?
Dann brauchst du kein sed.
Das geht mit der bash/ksh als Shell (Bitte immer die verwendete Shell angeben!) einfacher.

Das hier ist sehr ausführlich, funktioniert auch mit Dateien mit häßlichen Leerzeichen.

Code:
$ while read file ;
do #Wir testen ob es die Datei gibt! 
if [ -e "$file" ];
 then 
echo "Datei $file existiert";
# hier verschieben wir
# Das ist auskommentiert, bitte vorher testen.
# Müssten eigentlich noch testen, ob das ziel schon existiert, um nicht zu 
# überschreiben!
# Verwende erstmal echo!
echo "$file" "/new/path/$(basename "$file")";
# mv "$file" "/new/path/$(basename "$file")";
fi;
done <test1
# Das ist meine Testausgabe
/tmp/test/file1 /new/path/file1
/tmp/test/test/file2 mit Leerzeichen /new/path/file2 mit Leerzeichen

man basename
man dirname

Alternativ dazu gibt es noch poormans basename
Code:
F=/tmp/test/Testfile
# Pfad
PFAD="${F%\/*}
# Datei
DAT="${F##*\/}"

Gruß Wolfgang
 
Hallo,

@ Alex, klingt irgendwie einleuchtend
@ Wolfgang, das mit dem Basement könnte interessant sein, aber wie kopiere ich denn dann damit

Danke schonmal
 
Ersetze mein Echo mit cp.
Ohne jeglichen Test
Code:
while read file;
do
cp "$file" "/new/path/"
done <inputdatei

Aber deine Frage bezog sich auch auf das Trennen von Pfad und Datei.
Deshalb der Hinweis auf basename!

Gruß Wolfgang
 
Hallo zusammen,

also ich bin mit meinem Problem jetzt wie folgt :
Code:
   find . -name '*.zip'>temp.out 2>/dev/null
   awk ' ! /test/ && ! /Test/ { print $0 } ' temp.out >zip.out
   
   while read file
    do
     ln "$file" /listings/
    done <zip.out

Das macht auch soweit dass was ich will,
allerdings habe ich ein Problem , wenn der Dateiname schon existiert.

Jemand eine kreative Idee ?
Bzw. jemand da, der mir das vielleicht in schön machen kann ?
Denke dass ist arg umständlich oder ?

Wäre super nett wenn ihr mir helfen könntet...
 
Zuletzt bearbeitet:
Code:
#!/bin/bash

find -name *.zip | awk ' ! /[Tt]est/ { print $0 } ' | while read line
do

base=$(basename $line)
if test -e /listings/$base
 then
  echo "Datei $base existiert bereits"
else
 cp $line copy
fi
done

exit
 
Mal ganz doof gefragt:

Kann es sein, dass du hier fdupes (oder eines der anderen Programme zum auffinden und Auflösen, bzw. Hardlinken, von duplizierten Dateien) in Bash implementieren willst?

Es gibt zwei Möglichkeiten:

1. Du weisst nicht, dass es fdupes gibt.
oder
2. Du willst es einfach als Übung selbst implementieren.

Was stimmt, bzw. was genau ist dein Hauptproblem?
 

Ähnliche Themen

Script zur Korrektur einer E-Book Datei

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

CSV Datei mit sed manipulieren/optimieren/ergänzen

SED: Zu bearbeitende Dateien aus Textfile einlesen

Queue für copy Script

Zurück
Oben