ubuntuusers.de

Bash Kommando für Dateisuche;Dateien auflisten die nicht *.mp3 enthalten

Status: Gelöst | Ubuntu-Version: Ubuntu 9.10 (Karmic Koala)
Antworten |

sebastian1994

Anmeldungsdatum:
17. August 2008

Beiträge: 238

Hallo liebes Forum;

Ich habe ein kleines Problem; und zwar habe ich mit banshee das Homeverzeichniss nach Dateien durchsuchen lassen; die importiert werden sollten; ich dachte; banshee würde nur .mp3 Dateien der Mediathek hinzufügen. Leider hat es alle anderen Dateien (Videos ...etc) die im Homeverzeichniss waren; also auch im Ordner ./Videos zum Beispiel in den Ordner ./Musik kopiert. Nun ist der Ordner leider viel zu groß. Ich möchte nun ein Bash-Skipt erstellen; dass mir alle Dateien die nicht *.mp3 enthalten in einen anderen Ordner verlegt.Leider kenne ich ich nur find; dass mir ja nur Namen nach bestimmten Inhalten durchsucht; und nicht nach welchen; die nicht enthalten sind.

Vielen Dank schon mal im Voraus;

Grüße

Sebastian

kopf-basher

Anmeldungsdatum:
10. April 2010

Beiträge: 110

cd $HOME/.Musik
mv $(ls | grep -v .mp3) $HOME/anderer/ordner/

sebastian1994

(Themenstarter)

Anmeldungsdatum:
17. August 2008

Beiträge: 238

Hmm....Danke erstmal für deine schnelle Antwort.

Leider funktioniert das noch nciht richtig; in diesem ordner ist zum Beispiel auch eine xml Datei; diese wurde cniht kopiert. Außerdem kommt immer die Fehlermeldung:

sebastian@Koala:~/Musik$ mv $(ls | grep -v *.mp3) $HOME/anderedateien
mv: Aufruf von stat für „Übereinstimmungen“ nicht möglich: No such file or directory
mv: Aufruf von stat für „in“ nicht möglich: No such file or directory
mv: Aufruf von stat für „Binärdatei“ nicht möglich: No such file or directory
mv: Aufruf von stat für „FlashNWIE1w.mp3.“ nicht möglich: No such file or directory
mv: Aufruf von stat für „Übereinstimmungen“ nicht möglich: No such file or directory
mv: Aufruf von stat für „in“ nicht möglich: No such file or directory
mv: Aufruf von stat für „Binärdatei“ nicht möglich: No such file or directory
mv: Aufruf von stat für „FlashWR8DrW.mp3.“ nicht möglich: No such file or directory
mv: Aufruf von stat für „Übereinstimmungen“ nicht möglich: No such file or directory
mv: Aufruf von stat für „in“ nicht möglich: No such file or directory
mv: Aufruf von stat für „Binärdatei“ nicht möglich: No such file or directory
mv: Aufruf von stat für „FlashWwkYBE.mp3.“ nicht möglich: No such file or directory
sebastian@Koala:~/Musik$ 

Grüße

Sebastian

kopf-basher

Anmeldungsdatum:
10. April 2010

Beiträge: 110

hatte mich im nachhinein nochmal berichtigt. das sternchen bei .mp3 war falsch

nicht

mv $(ls | grep -v *.mp3) $HOME/anderer/ordner/

sondern

mv $(ls | grep -v .mp3) $HOME/anderer/ordner/

Red_Radish

Anmeldungsdatum:
7. September 2007

Beiträge: 770

sebastian1994 schrieb:

dass mir ja nur Namen nach bestimmten Inhalten durchsucht; und nicht nach welchen; die nicht enthalten sind.

Vergleiche mal die folgenden Ausgaben 😉

1
find . -name '*.[Mm][Pp]3'
1
find . ! -name '*.[Mm][Pp]3'

Denn Unsinn von kopf-basher vergisst du am besten gleich wieder. Das gibt garantiert Probleme mit Leerzeichen, Sonderzeichen, IFS usw.

kopf-basher

Anmeldungsdatum:
10. April 2010

Beiträge: 110

Denn Unsinn von kopf-basher vergisst du am besten gleich wieder. Das gibt garantiert Probleme mit Leerzeichen, Sonderzeichen, IFS usw.

deine grossartige lösung ist aber immernoch nicht die lösung für sein eigendliches problem:

Ich möchte nun ein Bash-Skipt erstellen; dass mir alle Dateien die nicht *.mp3 enthalten in einen anderen Ordner verlegt.

sebastian1994

(Themenstarter)

Anmeldungsdatum:
17. August 2008

Beiträge: 238

hmm; beide Lösungsansätze haben auch Probleme mit Unterverzeichnissen....

Die Groß- und Kleinschreibung ist ja egal; da die Dateien nicht gleich gelöscht werden und ich nochmal drüberschaue; verhindere ich Blindgänger... das ist nicht das Problem.

Vielen Danke aber bis hier her.

find . ! -name '*.[Mm][Pp]3'

Hier werden auch Unterverzeichnisse aufgelistet; die (logischerweise) nicht auf .mp3 enden; mit -type f wär dass dann auch ok.

Vielen Dank; der Lösungsweg für mich müsste ungefähr so heißen:

 ~/Musik$ find . -type f  ! -name '*.[Mm][Pp]3'-exec mv "{}" /home/Sebastian/anderedateien/ \;

Leider wird der Befehl nicht angenommen; es kommt immer die Meldung:

find: Der Pfad muß vor dem Suchkriterium stehen: mv
Aufruf: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [Pfad...] [Suchkriterium]

Habt ihr hier eine Idee?

kopf-basher

Anmeldungsdatum:
10. April 2010

Beiträge: 110

ok...für sonderzeichen is das ganze etwas länger:

cd $HOME/.Video
for i in *.mp3
do
mv "$i" "/home/DEINUSERNAME/anderer/ordner/$i"
done

Red_Radish

Anmeldungsdatum:
7. September 2007

Beiträge: 770

sebastian1994 schrieb:

 ~/Musik$ find . -type f  ! -name '*.[Mm][Pp]3'-exec mv "{}" /home/Sebastian/anderedateien/ \;

Leerzeichen nicht vergessen

~/Musik$ find . -type f  ! -name '*.[Mm][Pp]3' -exec mv -i "{}" /home/Sebastian/anderedateien/ \;
#                                            ^^^      

Das '-i' würde ich dranhängen, damit nichts überschrieben wird. Es kann ja mehrere Dateien mit dem gleichen Namen in unterschiedlichen Verzeichnissen geben,...

Red_Radish

Anmeldungsdatum:
7. September 2007

Beiträge: 770

kopf-basher schrieb:

ok...für sonderzeichen is das ganze etwas länger:

Jetzt ist es aber nicht mehr rekursiv wie find 😉

sebastian1994

(Themenstarter)

Anmeldungsdatum:
17. August 2008

Beiträge: 238

OK; Vielen Dank.

Es funktioniert ☺

/Musik$ find . -type f ! -name '*.[Mm][Pp]3' -exec mv -i "{}" /home/Sebastian/anderedateien/ \;

Vielen Dank an Red Radish und an kopf-basher.

Grüße

Sebastian

Antworten |