Liebe/-r Experte/-in,
habe gerade eine Datenrettung vom PC meiner Tochter gemacht.
Jetzt habe ich unzählige Verzeichnisse, in denen ich Doks, MP3s, JPGs und viele andere nicht benötigte Dateien habe.
Da ich nicht so firm in der Shell-Programmierung bin, suche ich auf diesem Wege ein Skript, welches mir Dateien eines bestimmten Dateityps z. Bsp. *.jpg aus allen Unterverzeichnissen extrahiert und in eine Zielverzeichniss z. Bsp. /tmp/jpg schreibt. Es sollen dabei in dem Zielverzeichniss keine Unterverzeichnisse entstehen.
Ich hab schon einiges ausprobiert. Aber immer wurden wieder Unterverzeichnisse mit dem Source-Verzeichnisnamen angelegt.
Ich würde mich freuen, wenn mir jemand unter die Arme greifen könnte.
Vielen Dank schon mal.
VG
Klaus
Hallo Klaus,
Du schreibst leider nicht, welches Betriebssystem es genau ist, wo das laufen soll. Ich gehe mal davon aus, es ist ein Linux. Für die anderen Unixe ist folgende Lösung aber auch brauchbar:
- wechsle zunächst in das oberste Verzeichnis, wo Deine zu kopierenden Dateien liegen (z. B. /home)
- tippe dann folgende Zeile ein:
find . -name „*.jpg“ -exec cp {} /tmp/jpg ;
- beachte dabei genau die Leerzeichen und Anführungszeichen
- für andere Dateitypen ersetzt Du einfach „jpg“ (vor dem „-exec“ durch die entsprechende Endung
- das Zielverzeichnis kannst Du natürlich ebenfalls ändern
Ich hoffe, das hilft!
Viele Grüße,
Thomas
Hallo Thomas,
zunächst vielen Dank für deine Antwort. Du hast richtig vermutet. Es handelt sich um ein Linux. Ein Opensuse!
Ich habe folgenden Befehl eingegeb:
find . -name „*.jpg“ -exec cp {} /tmp/jpg ;
Danach hate ich aber eine einzelne Datei jpg und kein Verzeichnis.
Was stimmt da nicht?
Kannst du mir noch mal helfen?
Danke.
Klaus
Hallo Klaus,
hatte ich doch vergessen … vorher muss das Zielverzeichnis angelegt sein, also in diesem Fall:
mkdir /tmp/jpg
und danach erst der find-Befehl. Sonst wird jede einzelne Datei nacheinander als Dateikopie /tmp/jpg angelegt - wie bei Dir geschehen.
Viele Grüße
Thomas
Hallo Thomas,
vielen Dank. Hat gefunzt, 
VLG
Klaus
Hallo Klaus,
das geht in einer Zeile
cd ins Verzeichnis, wo Deine Quelldateien liegen.
Für die jpgs gehen wir mal davon aus, dass Du sie Nach /tmp/Bilder kopieren willst.
find . -name *.jpg -exec cp {} /tmp/Bilder ;
et voilà
Viele Grüße
Waldemar
Hallo Waldemar,
vielen Dank. Die Lösung funzt.
VG
Klaus
Hallo Klaus,
handelt es sich um ein **nix, z.B. Linux ?
Wenn ja habe ich ein kleines Script gebastelt (ohne viel Komfort), das vom aktuellen Verzeichnis aus alle Verzeichnisse durchsucht und alle Dateien mit dem anzugebenden Suffix (z.B. mp3 oder jpg *man achte auf Groß- und Kleinschreibung!)
in ein ebenfalls anzugebendes Ziel-Verzeichnis kopiert. Schon vorhandene Dateien mit gleichen Namen werden dabei überschrieben.
Mit
vi rec-copy
eine Datei anlegen und den nachfolgenden Inhalt per Copy & paste reinkopieren (ohne cut):
---- cut ----
!/bin/bash
DEST_DIR=$1
SUFFIX=$2
echo Destination: $DEST_DIR
echo Suffix to copy: *.$SUFFIX
declare -i COUNTER=0
declare -i FINISHED=0
function DirScan
{
DIRS= ls -ld \* | awk '{ if( $1 ~/^drwx/ ) { print $8 } }'
Subdirs in an array
for DIR in ${DIRS}
do
SPATH[COUNTER]=pwd/${DIR}
echo „SPATH ${COUNTER}: ${SPATH[COUNTER]}“
COUNTER=${COUNTER}+1
done
}
function DoScan
{
DirScan
while [${FINISHED} -lt ${COUNTER}]
do
cd ${SPATH[FINISHED]}
cp *.$SUFFIX $DEST_DIR
FINISHED=${FINISHED}+1
echo "Dir: pwd"
echo „Dirs passed: ${FINISHED} of ${COUNTER}“
DoScan
done
}
DoScan
---- cut ----
Danach ausführbar machen:
chmod 755 rec-copy
Dann kannst Du aus dem Verzeichnis der Datenrettung z.B. heraus das Script so aufrufen:
$HOME/rec-copy
also z.B. für alle jpg-Dateien:
$HOME/rec-copy $HOME/dateisammlung jpg
Ich hoffe, das hilft Dir.
Viele Grüße,
Udo
Hallo Udo,
vielen Dank für deine Zusendung. Bin momentan in Zagreb unterwegs und weiss noch nicht wann ich dazu komme deine Skripte auszuprobieren.
Habe inzwischen auch schon andere Zuschriften erhalten.
Also nochmals vielen Dank
VG
Klaus