Frage Wie verschiebt man mehrere Dateien gleichzeitig in ein bestimmtes Zielverzeichnis?


Ich habe eine Reihe von Dateien in einem Verzeichnis (zusammen mit vielen anderen Dateien), die ich verschieben möchte.

Glücklicherweise enthalten alle Dateien, die ich verschieben möchte, eine bestimmte Kennung in ihren Namen, also kann ich ls | grep IDENTIFIER um die genaue Liste der zu verschiebenden Dateien zu erhalten.

Aber wie kann ich ausführen? mv file /path/to/dest/folder/ sofort, und nicht eins nach dem anderen (es gibt viele Dateien zu verschieben)?


118
2017-11-08 13:13


Ursprung




Antworten:


Wenn du dich bewegen willst ABC-IDENTIFIER-XYZ.ext oder IDENTIFIER-XYZ.xml, können Sie verwenden:

mv *IDENTIFIER* ~/YourPath/

* ist ein Platzhalter für null oder mehr Zeichen, das heisst null oder mehr Zeichen, gefolgt von IDENTIFIER, gefolgt von null oder mehr Zeichen.

Dies wird alle Dateien verschieben, die enthalten das IDENTIFIER du hast angegeben.


85
2017-11-08 13:33





Du könntest benutzen

mv -t DESTINATION file1 file2 file3

und

mv -t DESTINATION `ls|grep IDENTIFIER`

funktioniert, aber ich bin mir nicht sicher, ob mv mehrmals aufgerufen wird oder nicht, da grep für jede Übereinstimmung eine neue Zeile ausgibt.


166
2017-11-14 11:07



funktioniert auf Linux, nicht sicher, ob es auf Mac funktioniert - Alexander Mills
funktioniert auf mac und git bash via git für windwows. - Brandt Solovij
Funktioniert nicht auf Mac (10.11.16 El Capitan). Aber Sie können einfach den Zielordner auf der Rückseite, d. H. mv file1 file2 ... destination - Sheljohn
-1 für den zweiten Ansatz, wie es für Dateien darunter fallen wird neue Zeilen - αғsнιη
Warum sollten Sie die Ausgabe von nicht analysieren? ls. - dessert


Sie können verwenden Platzhalter.

Beispiel: Um alle Dateien mit der Erweiterung .doc zu verschieben

mv *.doc /path/to/dest/folder/

Dadurch wird die gesamte doc-Datei unter dem aktuellen Verzeichnis an das bestimmte Ziel verschoben.

Bearbeiten

Um den Kommentar zu beantworten.

mv *.ext *.xml *.txt /path/to/dest/folder/


20
2017-11-08 13:21



Die Liste der zu verschiebenden Dateien wird jedoch nicht von der Erweiterung bestimmt. Einige der Dateien sind benannt: ABC-IDENTIFIER-XYZ.ext und einige nur IDENTIFIER-XYZ.ext alle haben meistens unterschiedliche Erweiterungen xml oder properties. - gilad hoch
@giladhoch Wie wäre es mit dem bearbeiteten? - Achu
@gliadhoch Wenn du dich so gut mit grep auskennst, kannst du meine Antwort oben / unten sehen. - ignite
wird nicht funktionieren, da es andere gibt .xml Dateien (zum Beispiel) möchte ich nicht bewegen. - gilad hoch


Wenn Sie eine Reihe von irrelevanten Dateien verschieben möchten (kein gemeinsames Muster in den Namen und Typen), können Sie tun, wie Herr Rajanand sagte: Wechseln Sie zuerst zu dem Verzeichnis, das die Dateien enthält, die Sie verschieben möchten

mv file1.ext1 file2.ext2 file3.ext3.. /destination/

Falls die Dateien in verschiedenen Verzeichnissen verstreut sind, müssen Sie nur den Pfad für jede Datei im Befehl move angeben


15
2018-03-26 04:03





Ich benutze Tuomaz Technik, aber leicht modifiziert:

mv file1 file2 file3 -t DESTINATION

Ich finde das leichter zu merken und schwieriger zu vermasseln, da es die gleiche Reihenfolge wie die vanilla mv-Operation verwendet:

mv file1 DESTINATION

10
2018-01-20 16:11



Die Manpage für mv erwähnt nicht a -t Möglichkeit. - Noumenon
linux.die.net/man/1/mv ja tut es - geoyws


Verwenden Sie diesen Befehl:

mv `ls|grep IDENTIFIER` /path/to/dest/folder  

Ls wird jedoch für diese Art der Verwendung nicht empfohlen. Benutzen finden Befehl stattdessen.


7
2017-11-08 13:44



ls wird für diese Art der Verwendung nicht empfohlen. Wenn Sie Dateien auflisten möchten, insbesondere mit einem grep hinter, benutze find . -name \*IDENTIFIER\*. - NorTicUs
Diese Antwort soll nur zeigen, wie Sie die Ausgabe des vorherigen Befehls in mv verwenden können. Da ls | grep in der Frage erwähnt wurde, habe ich es einfach kopiert. - ignite
Wie von @NorTicUs angegeben, ist der Einsatz von ls schlecht beraten. Außerdem können Dateien mit Leerzeichen ein Problem verursachen. - Paddy Landau
nicht analysieren ls - Zanna


Wenn Sie so viele Dateien zu verschieben haben, können Sie tatsächlich zu viele für die mv Befehl (oder andere Befehle wie rm). Ich schlage vor, zu verwenden xargs um jede Datei individuell in einer Schleife zu verschieben. Eine Möglichkeit, das zu umgehen, ist:

ls -1 | grep IDENTIFIER | xargs -i mv {} /path/to/dest/folder/

Das ls -1 (minus eins) stellt sicher, dass es in jeder Zeile nur einen Dateinamen gibt. Wenn Sie Aliasnamen für die ls Befehl Sie können mehrere Dateinamen in einer Zeile haben und versehentlich eine Datei verschieben, die Sie nicht verschieben wollten.


5
2017-11-14 10:05



Dies ist auch nützlich, wenn Ihr IDENTIFIER nicht einfach in einen Platzhalter umgewandelt werden kann oder wenn Sie grep mit einer komplexeren Regex verwenden möchten. - AggieBill
+1 für xargs. Finden ist fast immer besser und sicherer als ls. finden . IDENTIFIER -exec mv {} / Pfad / zu / Ziel / Ordner \; (ungetesteter Code). ist für das aktuelle Arbeitsverzeichnis. Das \; ist, den auszuführenden Befehl zu beenden. Je nachdem, was Sie gerade tun, müssen Sie möglicherweise -maxdepth 1 hinzufügen, damit es nicht in Unterverzeichnisse zurückkehrt. - Joe


Sie können die Ausgabe von ls für die Eingabe in mv commnad verwenden

mv $(ls | grep IDENTIFIER) /path/to/dest/dir

Der Befehl zwischen $() gibt eine Liste der Dateinamen zurück, die Ihrer Suche entsprechen und die als Parameter für den Befehl mv bereitgestellt werden können.


2
2017-11-13 19:38



nicht analysieren ls - Zanna


find -type f -name "[range]" -exec mv {} target-directory ';'

Mit diesem Befehl werden Dateinamen mit einem beliebigen Muster / Bereich in das Zielverzeichnis verschoben.

z.B.

find -type f -name "file[1-50000]" -exec mv {} target-directory ';'

Es wird Dateien mit Namen wie verschieben file1, file2 ... file50000 zu target-directory.


2
2017-09-07 14:51





Mit diesem Befehl können Sie mehrere Dateien verschieben.

mv SourceFilenames ~DestinationPath


1
2017-11-14 10:13