Ich bin noch nicht mit allen Tricks vertraut grep/find/awk/xargs
.
Ich habe einige Dateien, die einem bestimmten Muster entsprechen, zum Beispiel *.xxx
. Diese Dateien befinden sich an zufälligen Orten in einem bestimmten Verzeichnis. Wie kann ich solche Dateien finden und in einen Ordner in meinem Home-Verzeichnis unter Unix verschieben (der möglicherweise noch nicht existiert)?
Antworten:
quelle
mv -i -t ~/dst {} +
Wenn Sie alle Dateien innerhalb einer Verzeichnishierarchie in ein einzelnes Zielverzeichnis verschieben möchten, geben Sie in bash ≥4 (
shopt -s globstar
in Ihr Verzeichnis~/.bashrc
) oder zsh Folgendes ein :In anderen Schalen:
So lesen Sie diesen
find
Befehl:.
: Durchsucht das aktuelle Verzeichnis-name '*.xxx'
: Handle auf Dateien, deren Name mit diesem Muster übereinstimmt-exec … \;
: Führen Sie diesen Befehl für jede Datei aus und ersetzen Sie ihn{}
durch den Pfad zur DateiDie Verwendung eines komplexeren Befehls
find
ist schneller, wenn Sie über viele Dateien verfügen, da nichtmv
für jede Datei ein separater Prozess aufgerufen werden muss:Am
+
Ende wird angegebenfind
, dass der Befehl für mehrere Dateien gleichzeitig aufgerufen werden soll. Dafind
die Dateinamen nur am Ende der Befehlszeile angegeben werden können undmv
das Zielverzeichnis das letzte sein muss, verwenden wir eine Zwischen-Shell, um die Argumente neu anzuordnen (dies"$0"
ist das erste Argument für die Shell~/new-directory
und"$@"
die nachfolgenden Argumente vonfind
Erweiterung von{}
).quelle
Wenn Sie die Verzeichnisstruktur der übereinstimmenden Quelldateien in das neue Zielverzeichnis replizieren möchten, können Sie die Option --parents von GNU cp verwenden :
quelle
Sie können ohne find verwenden
-exec
auch:quelle
find -exec
viel sicherer ist. Dies schlägt beispielsweise bei Dateinamen mit Leerzeichen fehl.