Gibt es eine Möglichkeit zu mv
, cp
oder jede Dateioperation , so dass ich alle Dateien angeben konnte ich nicht wollen , betroffen?
Zum Beispiel, sagen , dass ich einen Ordner mit den Dateien haben file1
, file2
und file3
, und ich möchte bewegen file1
und file2
irgendwo. Anstatt die zu verschiebenden Dateien explizit zu benennen ( mv file1 file2 /path/to/destination
), möchte ich die nicht zu verschiebenden Dateien benennen und alle anderen im Ordner verschieben lassen ( mv --some-switch file3 /path/to/destination
)
command-line
rename
scp
Gleiten
quelle
quelle
mv file1 file2 /path/to/destination
wird nicht das tun, was Sie wollenAntworten:
Sie können die erweiterten Globbing-Muster in einigen Shells verwenden, um alle Dateien in einem Verzeichnis abzugleichen, mit Ausnahme derjenigen, die einem bestimmten Muster entsprechen. Zum Beispiel in ksh, bash oder zsh den Befehl
werden alle Dateien bewegen ,
/source
um/destination
die Dateien passende except*.bak
. In zsh können Sie auch schreiben,/source/^*.bak
wenn Sie das erste Mal ausführensetopt extended_glob
, und allgemeiner (erneut erforderlichsetopt extended_glob
)/source/*~*.bak
(oder/source/a*~*.bak
für alle Dateien, deren Name mita
Ausnahme von.bak
Dateien usw. beginnt ).Zsh verfügt über einen Massenbefehl zum Kopieren / Verschieben / Verknüpfen, mit dem unter anderem alle Dateien außer denen, die einem Muster entsprechen, verschoben werden können. Der folgende Befehl verschiebt beispielsweise alle Dateien außer
*.bak
von/source
nachtarget
und fügt.bak
dabei ihren Namen hinzu :Es gibt mehrere Befehle, die als
rename
Floating bezeichnet werden. Unter Debian und Ubuntu gibt/usr/bin/rename
es ein Perl-Skript, das Dateien unter einem neuen Namen verschiebt, der durch einen Perl-Ausdruck generiert wird. Sie können Dateien vom Umbenennen ausschließen, indem Sie keinen neuen Namen generieren, wenn die Datei ausgeschlossen werden soll. Mit dem folgenden Befehl (mit diesem speziellenrename
Programm) werden beispielsweise alle Dateien außer*.bak
von/source
nach verschoben/target
:Mit dem
find
Befehl können Sie die Dateien auswählen, die Sie verschieben möchten. Mit dem folgenden Befehl werden beispielsweise alle regulären Dateien außer*.bak
in/source
oder einem Unterverzeichnis in verschoben/target
(beachten Sie, dass die Verzeichnisstruktur reduziert ist):oder (effizienter, wenn viele Dateien verschoben werden müssen)
rsync
ist eine Verallgemeinerung voncp
undscp
mit sehr mächtigen Einschluss- / Ausschlussregeln. Mit dem folgenden Befehl werden beispielsweise alle Dateien außer*.bak
in/source
oder einem Unterverzeichnis/target
unter Berücksichtigung der Verzeichnisstruktur kopiert :pax
ist (unter anderem) eine anderecp
auf Steroiden. Die Ausschlussregeln sind bei weitem nicht so leistungsfähig wie die von rsync, bieten jedoch die Möglichkeit, Dateien beim Kopieren umzubenennen. Wenn Sie eine Datei in die leere Zeichenfolge umbenennen, wird sie von der Kopie ausgeschlossen. Mit dem folgenden Befehl werden beispielsweise alle Dateien außer*.bak
in/source
oder einem Unterverzeichnis in kopiert/target
und die Dateien.bak
im Vorbeigehen in umbenannt.Das obige Beispiel hat den unglücklichen Nebeneffekt, dass Verzeichnisse aufgerufen werden
foo.bak
, die durch die Kombinationfind
mitpax
:quelle
find
Befehl in enden muss\;
+
unmittelbar danach verwenden kannst{}
.