Ich versuche, alle Dateien im aktuellen Verzeichnis und alle Unterverzeichnisse in einem Verzeichnis zu sammeln. Ich versuche so etwas wie das Folgende
find -type f -exec mv {} collection/{} \;
Der obige Befehl funktioniert nicht, da der zweite {}
den vollständigen Pfad angibt. Wie kann ich alle Dateien sammeln?
command-line
find
Häschen
quelle
quelle
-maxdepth 1
würde es helfen , das Argument zu verwenden.find -type f -print0|xargs -0r mv -it colection/
Anstatt zu verwenden
find
(was die Arbeit gut macht), können Sie auch die Shell zu diesem Zweck verwenden.Angenommen, Sie möchten alle Dateien von $ PWD bis $ DEST. Der natürliche Versuch wäre:
Wie funktioniert das? Der Ausdruck "$ PWD / *" wird auf die Namen aller Dateien in diesem Verzeichnis erweitert. Diese Shell-Funktion wird als "Globbing" bezeichnet. Das letzte Argument von
mv
ist das Zielverzeichnis. Wenn Sie sehr viele Dateien haben, funktioniert dies nicht, da die Länge der Befehlszeile begrenzt ist.Die Lösung hat jedoch das Problem, dass Punktdateien weggelassen werden - oder "versteckte" Dateien, Dateien und Verzeichnisse, deren Name mit einem "." Beginnt. Um dies zu lösen, müssen Sie Ihre Shell anweisen, beim Globbing Dotfiles einzuschließen. Verwenden Sie dazu
bei der Verwendung
bash
(und Sie verwenden wahrscheinlich, esbash
sei denn, Sie haben die Standardeinstellung geändert). In dieser Shell funktioniert der obige Befehl auch für Punktedateien.Im
zsh
Übrigen haben Sie die Möglichkeit, dies von Fall zu Fall zu wählen. Um dies zu tun, setzen Siein deinem
.zshrc
. Dann können Sie verwendenum alle Dateien einschließlich der Punktedateien zu verschieben. (Das "D" bewirkt, dass die Option "GLOB_DOTS" vorübergehend aktiviert wird.)
Die ursprüngliche Frage war nun, alle regulären Dateien (nicht Verzeichnisse) aus allen Unterverzeichnissen und ihren Unterverzeichnissen in ein einziges Verzeichnis zu verschieben. Dies kann erreicht werden mit
zsh
:Hier lässt der Ausdruck
**/*
den Globber rekursiv in Unterverzeichnisse absteigen. DasD
bedeutet "auch Punktdateien auswählen"; das.
Mittel "nur reguläre Dateien auswählen, keine Verzeichnisse".quelle
find -type f -exec mv -t collection/ {} +
. Informationen zur Funktionsweise finden Sie auf der Handbuchseite.