Copy mit Pfad

D

DigmayerM

Grünschnabel
Hallo Script Meisters,
ich habe hier ein kleines Problem mit einem Copy Befehl und ich hoffe Ihr könnt mir helfen:
Ich habe mehrere Dateien gleichen Namens in verschieden Pfaden, wie z.B.
/Pfad1/../directory1/index.txt
/Pfad2/../directory2/index.txt
/Pfad3/../directory3/index.txt
usw.

Ich möchte nun die Dateien finden die index.txt lauten und mit Pfad in ein anderes Verzeichnis kopieren, sodaß es so aussieht:
/backup/../directory1/index.txt
/backup/../directory2/index.txt
/backup/../directory3/index.txt

Ich möchte aber dabei noch den ersten Teil des Urprungspfades weglassen und alles was danach kommt mit übernehmen.

Hat einer von Euch einen Vorschlag?

Gruß,
Markus
 
Wenn ich Dich richtig verstehe, willst Du nur die "index.txt" kopieren? Wenn nicht, bitte sagen.

Auf die Schnelle: Erstelle ein File copy_backup.sh

Code:
oldfile="$1"
newfile=$(echo $oldfile | sed -e "s|$(echo "$oldfile" | cut -d "/" -f2)|backup|")
mkdir -p "$(dirname "$newfile")"
cp "$oldfile" "$newfile"

und rufe es mittels

Code:
find / -name "index.txt" -exec copy_backup.sh {} \;

auf.

Gruss Phorus

edit: Der Vollständigkeit halber kann die newfile-Zeile auch wie folgt aussehen:

Code:
newfile=$(echo $oldfile | perl -pe 's|/?[\w]+|/backup|')

:D
 
Zuletzt bearbeitet:
Hallo
Wenn die Dateien alle ein gemeinsames Wurzelverzeichnis haben,
und in der selbenen Ebene liegen, und das Verz /backup existiert:

for i in $(find /quellpath -iname "index.txt");do
cp $i ${i/quellpath/backup/};
done


Stichwort Variablen expansion ;)

Gruß Wolfgang
PS wenn der Pfad / enthält sind die entsprechend zu Escapen
${i/quell\/path/backup\/unterverz/}

Edit:
Falls die Verzeichnisse noch nicht existieren, dann muss halt noch mkdir -p rein.

for i in $(find /quellpath -iname "index.txt");do \
if ! [ -d dirname ${i/quellpath/backup/} ]; then \
mkdir -p $(dirname ${i/quellpath/backup/}); \
fi;\
cp $i ${i/quellpath/backup/};\
done
 
Zuletzt bearbeitet:
Wolfgang_1 schrieb:
for i in $(find /quellpath -iname "index.txt");do
cp $i ${i/quellpath/backup/};
done


Stichwort Variablen expansion ;)

Wieder was gelernt :)

Gruss, Phorus
 
Hallo,

danke für die Hilfe, es klappt!

Gruß,
DigmayerM
 
Phorus schrieb:
Wieder was gelernt :)

Gruss, Phorus

Hallo @Phorus

Don' worry, deine Methode ist portabler! ;)

Wollte nur mal darauf hinweisen, dass es auch hier
mehrere Methoden gibt.

Insofern sind meine Beiträge oft nicht als Verbesserung,
(das maß ich mir nicht an), sondern Ergänzung zu verstehen.

Unter perl sagt man dazu TIMTOW= there is more then one way

Was man dann wählt, hängt immer auch von den Bedingungen ab.

Wenn der wegzuschneidende Path-Prefix allerdings variabel ist,
versagen erstmal beide Varianten.

Aber man könnte dann natürlich den zu ersetzenden Teilpfad durch
${I%/Pfad/soll/stehen/bleiben/datei} ermitteln und in meiner Variante einsetzen.
Das ist der einzige Vorteil gegenüber der Methode mit
cut.
Mit hässlichen Zeichen (space tab usw.) in Dateinamen, kommen beide Methoden wegen der Art der Verwendung von find latürnich nicht klar.
Da muss dann wohl eine Kombination mit xargs ran.


Gruß Wolfgang
 
Da dachte ich mir: "...komme ich dem Wolfgang mal zuvor, indem ich Lösungen mit sed, cut und perl anbiete...", und dann kommt doch noch ein anderer Lösungsvorschlag :D
 
Phorus schrieb:
Da dachte ich mir: "...komme ich dem Wolfgang mal zuvor, indem ich Lösungen mit sed, cut und perl anbiete...", und dann kommt doch noch ein anderer Lösungsvorschlag :D

Hehe
Geht natürlich aus ganz allein mit perl :D
Aber das war ja hier nicht gefragt gelle?

Gruß Wolfgang
 

Ähnliche Themen

Shell Skript zum automatischen Aufräumen von doppelten Ordnern

verzeichniss suche funktioniert nicht

rsnapshot und ein Rechteproblem?

rsync: Quelle größer als Ziel => "Archiv" aufteilen/splitten

Squid als RPCoHTTPS Proxy für Outlook Anywhere

Zurück
Oben