Ihre Kommentare erwähnen eine zusätzliche Einschränkung: Der Befehl sollte keine versteckten Dateien aus dem aktuellen Arbeitsverzeichnis verschieben. Wenn dies korrekt ist, könnten Sie bitte Ihre Frage bearbeiten, um dies zu erwähnen? Wenn Sie "Nur Dateien verschieben" sagen, denken Sie "Alle Dateien verschieben", einschließlich versteckter Dateien.
Wow, jemand, der weiß, wie man Find benutzt. Der Vollständigkeit halber solltest du -name [^.] * Im find verwenden, dh --- find. -maxdepth 1 -type f -name [^.] * -exec mv {} path \;
Chris
KOPIEREN SIE DIESE NICHT IN IHRE SCHALE. Das Semikolon bewirkt, dass es sofort ausgeführt wird. :)
Sherwood Callaway
@SherwoodCallaway Das Semikolon markiert das Ende von-exec
dstonek,
4
Ich bin ein "Benutze einen Hammer für alles" Typ, also benutze ich Bourneshell-Programme für Dinge, für die andere externe Programme verwenden ...
for file in * .*
do
test -f "$file" && mv "$file" "$HOME"/
done
Einige Leute mögen es, Dinge so wenig wie möglich zu tippen, aber ich bin ein ziemlich schneller Typist, und ich habe solche Dinge in mein Gehirn eingebaut, so dass es nicht allzu mühsam ist, dies zu tun, anstatt genau nachzuschauen Argumente zu finden und auszuführen und all das.
danke dafür werde ich es versuchen. Aber ich brauche immer noch die andere Antwort, weil es für ein Projekt ist, das ich im Linux-Kurs mache. Vielen Dank
1
Dies ist eine Antwort auf Ihre Frage. mv versteht keine dateien oder verzeichnisse oder fifos oder andere spezielle dateien. mv versteht nur Verzeichniseinträge und Inodes, und diese sind unabhängig vom Dateityp alle gleich. Damit mv nur einen bestimmten Dateityp verschieben kann, benötigen Sie so etwas wie test oder find, mit dem Sie anhand des Inodes feststellen können, um welche Datei es sich handelt. Mit anderen Worten, Ihnen wird eine Trickfrage gestellt, wenn Sie nur mit mv dazu aufgefordert werden .
Chris
1
Und ich sage, dass mv nur Inodes versteht, weil es in der Lage ist, eine Datei von einem Dateisystem in ein anderes zu verschieben, was technisch gesehen ein cp dann ein rm ist, nicht ein mv (was wirklich nur ein ln dann rm ist). Suchen Sie nach Hardlinks und Verzeichniseinträgen.
Chris
2
shorty: Das ist eine gute Antwort, du musst etwas anderes als den Befehl mv verwenden (zumindest die Shell). Dies ist ungefähr ein grundlegendes, wie es ohne Programmierung geht.
Kyle Brandt
3
@Mereghost ist sehr nah. Hier ist, was ich bekomme, um alle Dateien (einschließlich versteckter Dateien) zu verschieben, aber keine Verzeichnisse:
Bei der .After-Suche wird davon ausgegangen, dass Ihr aktuelles Verzeichnis die Quelle der Dateien ist, die Sie verschieben möchten. Wenn nicht, kann der Befehl wie folgt überarbeitet werden:
Ja, gut, das hat funktioniert, aber nicht zu 100%. Es hat alle Dateien von Verzeichnissen und Unterverzeichnissen nach ~ / location kopiert. Ich brauche nur etwas sehr Grundlegendes, das die Dateien ohne die versteckten Dateien aus dem Verzeichnis, in dem ich mich befinde, in ein anderes Verzeichnis kopiert. das ist es. trotzdem danke für den rat
Das ist unmöglich mit maxdepth als 1.
John T
behoben, so dass versteckte Dateien nicht kopiert werden.
John T
1
Die Syntax für find lautet find, then a directory, then a description of operations und things to match. Ein Platzhalter wie find * wird normalerweise nie verwendet, ohne ihn vor dem Verschieben zu schützen (z. B. find / path / to / directory -name goo * -Typ f.
chris
1
Die Suche funktioniert nur dann ordnungsgemäß, wenn Sie einen einzelnen Pfad zur Überprüfung übergeben. Wenn in Ihrem Beispiel beispielsweise Dateien vorhanden sind, die mit a - find beginnen, wird dies unerwartet explodieren. Es ist immer viel besser, wenn nur ein Programm den Verzeichniseintrag liest, und in Ihrem Beispiel verwenden Sie zwei verschiedene Programme (find und die Shell).
Dies schlägt für alle Dateien fehl, deren Name Leerzeichen enthält. Die Ausgabe von Befehlen, mit denen Dateinamen gedruckt werden, sollte niemals analysiert werden, es sei denn, es kann garantiert werden, dass eine ordnungsgemäße Begrenzung vorliegt. Siehe Warum Sie die Ausgabe von ls (1) nicht analysieren sollten, für die Hauptidee. Die Verwendung findder -execOption ist der beste Weg, um das Problem zu vermeiden.
Antworten:
Du kannst es versuchen
quelle
-exec
Ich bin ein "Benutze einen Hammer für alles" Typ, also benutze ich Bourneshell-Programme für Dinge, für die andere externe Programme verwenden ...
Einige Leute mögen es, Dinge so wenig wie möglich zu tippen, aber ich bin ein ziemlich schneller Typist, und ich habe solche Dinge in mein Gehirn eingebaut, so dass es nicht allzu mühsam ist, dies zu tun, anstatt genau nachzuschauen Argumente zu finden und auszuführen und all das.
YMMV, obwohl ...
quelle
@Mereghost ist sehr nah. Hier ist, was ich bekomme, um alle Dateien (einschließlich versteckter Dateien) zu verschieben, aber keine Verzeichnisse:
Bei der
.
After-Suche wird davon ausgegangen, dass Ihr aktuelles Verzeichnis die Quelle der Dateien ist, die Sie verschieben möchten. Wenn nicht, kann der Befehl wie folgt überarbeitet werden:Wenn Sie nur normale und keine versteckten Dateien verschieben möchten:
Wenn Sie nur versteckte und keine regulären Dateien verschieben möchten:
quelle
Wenn Sie keine Ordner mit Namen und Punkten haben, können Sie alle einfach verschieben:
mv . ~ / Zielordner
(Ich gehe davon aus, dass alle Ihre Dateien etwas sind. Etwas (in meinem Fall sind es normalerweise alle).)
ABER dank anderer Antworten - sehr hilfreich. Danke
quelle
Sie können find verwenden
quelle
mv `find ./sourcedir/* -type f` ./destdir
quelle
find
der-exec
Option ist der beste Weg, um das Problem zu vermeiden.