Wie finde ich eine Reihe von Dateien mit einer Zeichenfolge im Dateinamen (oder Textkörper) und verschiebe dann alle diese Dateien in einen bestimmten Ordner?

Wie finde ich eine Reihe von Dateien mit einer Zeichenfolge im Dateinamen (oder Textkörper) und verschiebe dann alle diese Dateien in einen bestimmten Ordner?

Sagen wir - was wäre, wenn ich jede HTML-Datei in mehreren unabhängigen Verzeichnissen mit dem Wort „heavengames“ im Dateinamen (und als zweite Frage, jede HTML-Datei mit dem Wort „heavengames“ im Text) in ein neues Verzeichnis mit dem Namen „heavengames-threads“ verschieben wollte?

Antwort1

So verschieben Sie Dateien mit diesem Wort im Namen:

find /path/to/dir1 /path/to/dir2 /and/so/on -type f -iname "*heavengames*" \
-exec mv -t /path/to/heavengames-threads {} \+

So verschieben Sie Dateien mit einem Wort im Textkörper:

find /path/to/dir1 /path/to/dir2 /and/so/on -type f -exec grep -q heavengames {} \; \
-exec mv -t /path/to/heavengames-threads {} \+

PS: Um zu prüfen, ob alles korrekt ist, fügen Sie echoes mvbeim ersten Durchlauf hinzu.

Antwort2

In zsh oder bash ≥4, basierend auf dem Dateinamen:

mkdir heavengames-threads
mv **/*heavengames*.html heavengames-threads/

Für mehr Flexibilität (zum Beispiel um die Verzeichnishierarchie neu zu erstellen, siehezmv(es gibtviele Beispiele auf dieser Site).

Verwenden Sie diese Option grep, um den Dateiinhalt zu durchsuchen. Mit aktuellen Versionen von GNU-Dienstprogrammen (d. h. unter nicht eingebettetem Linux oder Cygwin):

grep -RZ heavengames . | xargs -0 mv -t heavengames-threads/

Für portablere Befehle verwenden Sie find. SieheRushs Antwort.

verwandte Informationen