Schleifen und extrahieren Sie Dateien, die einem Pfad entsprechen

409
Alex

Ich bin derzeit in einem Verzeichnis mit vielen Verzeichnissen.

$ ls the bad icons 100 the games icons 100 the beach & camping icons 100 the halloween icons 100 

Wie kann ich alle Einträge extrahieren, die dem folgenden Pfad entsprechen, und sie in einem Verzeichnis ausgeben?

//png/colored/512x512/*.png 
0

2 Antworten auf die Frage

1
RalfFriedl

Hast du das probiert?

mv //png/colored/512x512/*.png 

Wenn Sie die Meldung erhalten, dass zu viele Dateien vorhanden sind und der Befehl zu lang ist, versuchen Sie dies

echo //png/colored/512x512/*.png | xargs mv --target-directory 
Ich empfehle immer die Verwendung von "mv -i" oder "mv -n" bei Massenbewegungen, um einen stummen und irreversiblen Datenverlust bei widersprüchlichen Namen zu vermeiden. In diesem Fall sollte es sicher sein, aber darauf möchte ich mich nicht verlassen. Gordon Davisson vor 5 Jahren 1
Muss xargs nicht angewiesen werden, etwas zu tun, z. B. run 'mv'? Die Standardeinstellung ist "Echo". Und was passiert, wenn Dateinamen Leerzeichen enthalten? Die Eingabe von xargs wird standardmäßig durch Leerzeichen / Zeilenumbrüche begrenzt. Und wie wird `` zu einem der vier Ordnernamen (die Leerzeichen enthalten)? Xen2050 vor 5 Jahren 0
0
Xen2050

Da Sie sich bereits im Verzeichnis befinden, können Sie es .mit find verwenden:

find . -path "*/png/colored/512x512/*.png" -exec mv -t TARGETDIR {} + 

Wenn Sie die gefundenen Dateien zuerst durchsehen möchten, entfernen Sie die -execfolgenden Elemente (oder ersetzen Sie sie durch | less). Find gibt die Dateinamen standardmäßig in stdout aus, wie in:

find . -path "*/png/colored/512x512/*.png" | less 

Möglicherweise möchten Sie mit mvder -i, --interactiveOption vor dem Überschreiben eine Eingabeaufforderung eingeben, falls sich in Konflikt stehende Dateinamen befinden.