Wie finde ich nur die * .mp3-Dateien mit einem rekursiven Befehl wie ls -R *.mp3
in einem Verzeichnis, das mehrere Unterverzeichnisse enthält, und kopiere diese Dateien am Ende in ein von mir ausgewähltes Verzeichnis.
Danke für deine Unterstützung.
command-line
V 3 L 3 N 0
quelle
quelle
find /path/to/dir/ -name '*.c' | xargs cp -t /target/
xargs
ist normalerweise viel schneller. Ich habe gerade einen kurzen Test hier durchgeführt, um eine Ladung von c-Dateien zu finden und sie auszuführenls -l
. Es ist 0m2.420s fürxargs
und 0m25.494s für-exec
... Natürlich wird diecp
Operation in diesem Fall die meiste Zeit dauern, also spielt es wahrscheinlich keine Rolle, aber es lohnt sich, darauf zu achten.-n`` switch to the
Befehl cp` hinzuzufügen , um ein Überschreiben bei doppelten Namen zu vermeiden (oder ein Skript zu schreiben, das nach Duplikaten sucht, bevor das Ziel kopiert und nach Bedarf umbenannt wird)Es gibt auch einen anderen Weg, der meiner Meinung nach perfekt zu Ihrem Zweck passt. Sie können kombinieren
find
mit einerwhile
Schleife und nicht einmal verwenden müssen entweder vonexec
oderxargs
überhaupt nicht . Wenn Sie beispielsweise Ihre Dateimp3s
aus Ihrem Download-Ordner in Ihren Musikordner kopieren möchten, verwenden Sie das folgende Skript, das ich bereits oft verwendet habe.Sie können es beliebig ändern, indem Sie die Verzeichnisse ändern, in denen
find
die resultierenden Dateien durchsucht und abgelegt werden. Wenn kein Verzeichnis angegeben ist,find
wird der gesamte Home-Ordner durchsucht. Sie können auchcp
zumv
oder anderen Befehlen wechseln . Es ist ziemlich schnell, da ich es gerade mit 3945.jpg
Dateien getestet habe ! Kopieren Sie es in einen Texteditor, speichern Sie es und machen Sie es durch Ausführen ausführbarchmod +x myscript
.In diesem Bash-Wiki wird gezeigt, wie nützlich es ist, die
while
Schleife und dieread
Befehle zu kombinieren , um die Ausgabe desfind
Befehls zu verarbeiten. und die Art und Weise, wie ich es gemacht habe, stellt sicher, dass das Skript nicht kaputt geht, wenn es auf Dateinamen mit Leerzeichen oder anderen unerwarteten oder Sonderzeichen stößt.Weitere allgemeine Informationen zum
find
Befehl erhalten Sie im Terminalman find
oder auf den Ubuntu-Manpages online . Eine gute Einführung in die Verwendung von find finden Sie auch in diesem Artikel .quelle
find ~/Downloads -type f -iname '*.mp3' | while read mp3file; do cp "$mp3file" ~/Music; done
einfacher?-n`` switch to the
Befehl cp` hinzuzufügen , um ein Überschreiben bei doppelten Namen zu vermeiden (oder ein Skript zu schreiben, das nach Duplikaten sucht, bevor das Ziel kopiert und nach Bedarf umbenannt wird)