Wie kopiere ich einige, aber nicht alle Dateien?

Wie kopiere ich einige, aber nicht alle Dateien?

*Sie können also als Platzhalter für alle Dateien verwenden, wenn Sie cpsie im Kontext eines Verzeichnisses verwenden. Gibt es eine Möglichkeit, alle Dateien außer xder Datei zu kopieren?

Antwort1

Rsync handhabt dies gut.

Beispiel: Alles kopieren:rsync -aP /folder1/* /folder/2

Beispiel: Alles kopieren mit Ausschluss:rsync -aP --exclude=x /folder1/* /folder2/

Der -aPSchalter:

  • a: Ähnlich wie cp -a, rekursiv usw.
  • P: Zeigt den Fortschritt, eine nette Funktion von rsync.

Antwort2

In bashkönnen Sie verwenden extglob:

 $ shopt -s extglob  # to enable extglob
 $ cp !(b*) new_dir/

wo !(b*)alle b*Dateien ausgeschlossen werden.

Sie können später deaktivieren extglobmit

 $ shopt -u extglob

Antwort3

Dies ist keine Funktion von cp, sondern eine Funktion Ihrer Shell (es erweitert das *auf alle Dateien außer dem Punkt). Die Antwort hängt also davon ab, welche Shell Sie verwenden. Beispielsweise zshunterstützt das diese Syntax:

$ cp ^x /path/to/destination

Wobei ^x„alle Dateien außer x“ bedeutet.

Sie können Auswahl- und Abwahlmuster auch kombinieren. Um beispielsweise alle WAV-Dateien außer denen, die xyz enthalten, zu kopieren, können Sie Folgendes verwenden:

cp *.wav~*xyz*

Antwort4

Könnte auch in der guten alten (portablen/kompatiblen) Bourne-Shell auf verschiedene Arten und mit Standardtools erfolgen, allerdings auf viel weniger elegante Weise als durch die Verwendung von erweitertem Shell-Globbing oder Befehlen mit integrierten Ausschlussoptionen.

Wenn es nicht zu viele Dateien sind (und keine Namen mit Leerzeichen und/oder Zeilenumbrüchen), könnte dies eine Möglichkeit sein:

cp `ls | egrep -v '^excludename$'` destdir/.

Sicher, bashund GNU-Tools sind großartig und leistungsstark, aber sie sind trotzdem nicht immer verfügbar. Wenn Sie beabsichtigen, es in ein portables Skript einzufügen, würde ich es findwie im Kommentar von Rush empfehlen.

verwandte Informationen