Linux Ubuntu Dateien aus einem Verzeichnis in eine vorhandene Verzeichnisstruktur verschieben
Hallo,
ich haben sehr viele Bilddateien in einem Verzeichnis eine Verzeichnisstruktur wo die gleichen Datei mit gleichen Dateinamen drin sind
Verzeichnis mit den Bildern /tmp/ Bilder_alle
Verzeichnis mit den vorhanden Bilder /tmp/Bilder_klein/...
Verzeichnis ohne Bilder /tmp/Bilder_groß/.....
Jetzt soll geprüft werden wo das Bild aus dem Verzeichnis /tmp/Bilder_alle im Verzeichnis /tmp/Bilder_klein/... befindet und aus dem Verzeichnis /tmp/ Bilder_alle in das entsprechende Unterverzeichnis /tmp/Bilder_groß/..... verschoben werden.
Problem ist das die Unterverzeichnisse leider auch auch mit leer Zeichen sind z.B.
/tmp/Bilder_klein/12. Test 56/1/tr
/tmp/Bilder_klein/14. Test 55/3/zr
/tmp/Bilder_groß/12. Test 56/1/tr
/tmp/Bilder_groß/4. Test 55/3/zr
Ich habe folgendes Script was aber irgendwie falsch ist.
ich haben sehr viele Bilddateien in einem Verzeichnis eine Verzeichnisstruktur wo die gleichen Datei mit gleichen Dateinamen drin sind
Verzeichnis mit den Bildern /tmp/ Bilder_alle
Verzeichnis mit den vorhanden Bilder /tmp/Bilder_klein/...
Verzeichnis ohne Bilder /tmp/Bilder_groß/.....
Jetzt soll geprüft werden wo das Bild aus dem Verzeichnis /tmp/Bilder_alle im Verzeichnis /tmp/Bilder_klein/... befindet und aus dem Verzeichnis /tmp/ Bilder_alle in das entsprechende Unterverzeichnis /tmp/Bilder_groß/..... verschoben werden.
Problem ist das die Unterverzeichnisse leider auch auch mit leer Zeichen sind z.B.
/tmp/Bilder_klein/12. Test 56/1/tr
/tmp/Bilder_klein/14. Test 55/3/zr
/tmp/Bilder_groß/12. Test 56/1/tr
/tmp/Bilder_groß/4. Test 55/3/zr
Ich habe folgendes Script was aber irgendwie falsch ist.
for datei in $(find /tmp/Bilder_alle -name "*.jpg")
do
delimiter='/'
s=$datei$delimiter
array=();
while [[ $s ]]; do
array+=( "${s%%"$delimiter"*}" );
s=${s#*"$delimiter"};
done;
echo ${array[3]}
for data in $(find /tmp/Bilder_klein -maxdepth 100 -name ${array[3]});
do
echo "old: $datei moved to ${data/tmp/Bilder_groß}";
mv $data ${data/tmp/Bilder_groß};
done;
done;
Please also mark the comments that contributed to the solution of the article
Content-Key: 558021
Url: https://administrator.de/contentid/558021
Printed on: April 24, 2024 at 19:04 o'clock
7 Comments
Latest comment
Alter Kaffee denn so wie oben sollte man es genau nicht machen ... Hier findest du wasserdichte Lösungen für dieses und noch andere Fallstricke bei Pfaden wie escapes etc.
How to loop through file names returned by find?
Für das oben geschilderte reicht ein Einzeiler
How to loop through file names returned by find?
Für das oben geschilderte reicht ein Einzeiler
find /tmp/Bilder_alle -type f -name *.jpg | while read -r line;do subdir=$(dirname "$line");if [[ -f "/tmp/Bilder_klein${subdir/\/tmp\/Bilder_alle/}/$(basename "$line")" ]];then mv "$line" /tmp/Bilder_groß/ ;fi;done
Lach, dich hat wohl der Sprachlosvirus befallen 🙈🙈, und doch funktioniert hier absolut problemlos auch mit Leerzeichen ...
"Funktioniert nicht" ist übrigens in einem Admin Forum keine Antwort, versteht sich doch von selbst, *Kopfschüttel*!
"Funktioniert nicht" ist übrigens in einem Admin Forum keine Antwort, versteht sich doch von selbst, *Kopfschüttel*!
Dann hast du sie fehlerhaft angepasst, geht hier wie gesagt testweise problemlos, ansonsten hast du den Topic nicht exakt genug erläutert. Vom fehlenden OS mal ganz abgesehen.