GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kopiert man Dateien unter Linux und Unix? 10 cp Befehlsbeispiele

cp ist einer der grundlegenden Befehle in Unix. Sie wissen bereits, dass es verwendet wird, um eine oder mehrere Dateien oder Verzeichnisse von der Quelle zum Ziel zu kopieren.

Obwohl dieses Tutorial für Anfänger gedacht ist, ist es auch für jeden hilfreich, verschiedene cp-Befehlsoptionen anhand einiger praktischer Beispiele schnell zu überprüfen.

Selbst wenn Sie ständig den cp-Befehl verwenden, könnten Ihnen wahrscheinlich eines oder mehrere der unten erläuterten Beispiele neu sein.

Die allgemeine Form des Kopierbefehls:

cp [option] source destination

1. Kopieren Sie eine Datei oder ein Verzeichnis von der Quelle zum Ziel

Um eine Datei zu kopieren, müssen Sie Quelle und Ziel an den Kopierbefehl übergeben. Das folgende Beispiel kopiert die Datei von project/readme.txt nach projectbackup/readme-new.txt

$ cp project/readme.txt projectbackup/readme-new.txt

$ cd projectbackup/

$ ls
readme-new.txt

Wenn Sie eine Datei von einem Ordner in einen anderen mit demselben Namen kopieren möchten, genügt der Name des Zielverzeichnisses, wie unten gezeigt.

$ cp project/readme.txt projectbackup/

$ cd projectbackup/

$ ls
readme.txt

Ein Verzeichnis (und sein gesamter Inhalt) kann mit der rekursiven Option -r wie unten gezeigt von der Quelle zum Ziel kopiert werden:

$ ls project
src/  bin/  doc/  lib/  test/  readme.txt  LICENSE

$ cp -r project/ backup/

$ ls backup
src/  bin/  doc/  lib/  test/  readme.txt  LICENSE

2. Kopieren Sie mehrere Dateien oder Verzeichnisse

Sie können mehr als eine Datei von der Quelle zum Ziel kopieren, wie unten gezeigt:

$ cd src/
$ cp global.c main.c parse.c /home/thegeekstuff/projectbackup/src/

Wenn die Quelldateien ein gemeinsames Muster haben, verwenden Sie Platzhalter wie unten gezeigt. In diesem Beispiel werden alle C-Erweiterungsdateien in das Verzeichnis /home/thegeekstuff/projectbackup/src/ kopiert.

$ cp *.c /home/thegeekstuff/projectbackup/src/

Kopieren Sie mehrere Verzeichnisse wie unten gezeigt.

$ cd project/

$ cp -r src/ bin/ /home/thegeekstuff/projectbackup/

3. Vor dem Kopieren in ein Ziel sichern

Falls die Zieldatei bereits mit demselben Namen vorhanden ist, können Sie mit cp die Zieldatei sichern, bevor Sie sie überschreiben.

In diesem Beispiel existiert die readme.txt sowohl im project/- als auch im projectbackup/-Verzeichnis, und während sie von project/ nach projectbackup/ kopiert wird, wird die vorhandene readme.txt wie unten gezeigt gesichert:

$ cd projectbackup

$ ls -l readme.txt
-rw-r--r-- 1 bala geek 1038 Jan  8 13:15 readme.txt

$ cd ../project 

$ ls -l readme.txt
-rw-r--r-- 1 bala geek 1020 Jan  8 12:25 readme.txt

$ cp --backup readme.txt  /home/thegeekstuff/projectbackup/

Die vorhandene Datei wurde nach readme.txt~ verschoben und die neue Datei als readme.txt kopiert, wie unten gezeigt.

$ cd /home/thegeekstuff/projectbackup/
$ ls -l
-rw-r--r-- 1 bala geek 1020 Jan  8 13:36 readme.txt
-rw-r--r-- 1 bala geek 1038 Jan  8 13:15 readme.txt~

Apropos Backup:Es ist wichtig, dass Sie verstehen, wie der Befehl rsync funktioniert, um Dateien effektiv zu sichern.

4. Links beim Kopieren beibehalten

Wenn Sie den Befehl cp ausführen und die Quelle eine Linkdatei ist, wird die eigentliche Datei kopiert und nicht die Linkdatei. Falls Sie den Link nur so kopieren möchten, wie er ist, geben Sie die Option -d wie unten gezeigt an:

Das Folgende zeigt, dass ohne die Option -d die Datei (und nicht der Link) kopiert wird:

$ cd project/bin

$ ls -l startup.sh
lrwxrwxrwx 1 root root 18 Jan  8 13:59 startup.sh -> ../test/startup.sh

$ cp startup.sh /home/thegeekstuff/projectbackup/bin/

$ cd /home/thegeekstuff/projectbackup/bin/

$ ls -l
-rw-r--r--  1 root root       102 Jan  8 14:02 startup.sh

Gehen Sie wie folgt vor, um den Link beim Kopieren beizubehalten:

$ cd project/bin

$ cp -d startup.sh /home/thegeekstuff/projectbackup/bin/

$ ls -l startup.sh
lrwxrwxrwx 1 root root 18 Jan  8 14:10 startup.sh -> ../test/startup.sh

5. Überschreiben Sie keine vorhandene Datei

Wenn Sie nur kopieren möchten, wenn die Zieldatei nicht existiert, verwenden Sie die Option -n wie unten gezeigt. Dadurch wird die vorhandene Datei nicht überschrieben, und der cp-Befehl kehrt mit dem Erfolgs-Exit-Code zurück, wie unten gezeigt:

$ cd projectbackup

$ ls -l readme.txt
-rw-r--r-- 1 bala geek 1038 Jan  8 13:15 readme.txt

$ cd ../project 

$ ls -l readme.txt
-rw-r--r-- 1 bala geek 1020 Jan  8 12:25 readme.txt

$ cp -n readme.txt /home/thegeekstuff/projectbackup/bin/

$ echo $?
0

Wie Sie unten sehen, wurde die Zieldatei nicht überschrieben.

$ cd projectbackup

$ ls -l readme.txt
-rw-r--r-- 1 bala geek 1038 Jan  8 13:15 readme.txt

6. Vor dem Überschreiben bestätigen (interaktiver Modus)

Wenn Sie die Option -i verwenden, werden Sie um eine Bestätigung gebeten, bevor eine Datei wie unten gezeigt überschrieben wird.

$ cp -i readme.txt /home/thegeekstuff/projectbackup/
cp: overwrite `/home/thegeekstuff/projectbackup/readme.txt'? y

7. Hardlink zu einer Datei erstellen (anstatt zu kopieren)

Wenn Sie den Befehl cp ausführen, ist es möglich, einen festen Link der Datei zu erstellen (anstatt die Datei zu kopieren). Das folgende Beispiel erstellt den festen Link für die Datei sample.txt im Verzeichnis test/,

$ ls -li sample.txt
10883362 -rw-r--r-- 2 bala geek   1038 Jan  9 18:40 sample.txt

$ cp -l sample.txt test/ 

$ ls -li test/sample.txt
10883362 -rw-r--r-- 2 bala geek   1038 Jan  9 18:40 test/sample.txt

Wie oben zu sehen ist, ist die Datei test/sample.txt eine fest mit der Datei sample.txt verknüpfte Datei, und die Inodes beider Dateien sind gleich.

8. Erstellen Sie einen Softlink zu einer Datei oder einem Verzeichnis (anstatt zu kopieren)

Wenn Sie den cp-Befehl ausführen, ist es möglich, einen Softlink zu einer Datei oder einem Verzeichnis zu erstellen. Im folgenden Beispiel wird ein symbolischer Link für libFS.so.6.0.0 als libFS.so,

erstellt
# cd /usr/lib/

# ls -l libFS.so.6.0.0
-rw-r--r-- 1 root root 42808 Nov 19  2010 libFS.so.6.0.0

# cp -s libFS.so.6.0.0 libFS.so

# ls -l libFS.so
lrwxrwxrwx 1 root root 14 Jan  9 20:18 libFS.so -> libFS.so.6.0.0

9. Datei- oder Verzeichnisattribute beim Kopieren beibehalten

Mit der Option -p können Sie die Eigenschaften einer Datei oder eines Verzeichnisses wie unten gezeigt beibehalten:

$ ls -l sample.txt
-rw-r--r-- 2 bala geek   1038 Jan  9 18:40 sample.txt

$ cp -p sample.txt test/ 

$ ls -l test/sample.txt
-rw-r--r-- 2 bala geek   1038 Jan  9 18:40 test/sample.txt

Es ist auch möglich, nur die erforderlichen Eigenschaften wie Modus, Besitz, Zeitstempel usw. beizubehalten,

Das folgende Beispiel behält den Modus einer Datei beim Kopieren bei:

$ cp --preserve=mode sample.txt test/

10. Nur kopieren, wenn die Quelldatei neuer als die Zieldatei ist oder fehlt

Das Kopieren einer kleinen Datei nimmt nicht viel Zeit in Anspruch, aber es kann viel Zeit in Anspruch nehmen, wenn eine große Datei kopiert wird. Wenn Sie also eine große Datei kopieren, sollten Sie sicherstellen, dass Sie dies nur tun, wenn die Quelldatei neuer als die Zieldatei ist oder wenn die Zieldatei fehlt, indem Sie die Option -u wie unten gezeigt verwenden.

In diesem Beispiel werden die beiden Dateien LICENSE und readme.txt von project/ nach projectbackup/ kopiert. Die LICENSE-Datei existiert jedoch bereits im projectbackup/-Verzeichnis und ist neuer als die im project/-Verzeichnis.

$ cd project/

$ ls -l LICENSE readme.txt 
-rw-r--r-- 1 bala geek 108 Jan  8 13:14 LICENSE
-rw-r--r-- 1 bala geek 32 Jan  8 13:16 readme.txt

$ cd /home/thegeekstuff/projectbackup/

$ ls -l LICENSE readme.txt 
ls: cannot access readme.txt: No such file or directory
-rw-r--r-- 1 root root 112 Jan  9 20:31 LICENSE

In diesem Beispiel ist es also nicht erforderlich, die LICENSE-Datei erneut in das Verzeichnis projectbackup/ zu kopieren. Dies wird automatisch vom Befehl cp erledigt, wenn Sie die Option -u wie unten gezeigt verwenden. Im folgenden Beispiel wurde nur die readme.txt-Datei kopiert, wie durch den Zeitstempel auf der Datei angegeben.

$ cp -u -v LICENSE readme.txt  /home/thegeekstuff/projectbackup/
`readme.txt' -> `/home/thegeekstuff/projectbackup/readme.txt'

$ cd /home/thegeekstuff/projectbackup/

$ ls -l LICENSE readme.txt 
-rw-r--r-- 1 bala geek  112 Jan  9 20:31 LICENSE
-rw-r--r-- 1 bala geek   32 Jan  9 22:17 readme.txt

Linux
  1. So komprimieren Sie Dateien und Verzeichnisse unter Linux (mit Beispielen)

  2. So komprimieren und dekomprimieren Sie Dateien unter Linux

  3. So finden Sie Dateien mit dem fd-Befehl in Linux

  4. Wie verwende ich den Rsync-Befehl unter Linux?

  5. Linux Objcopy-Befehlsbeispiele zum Kopieren und Übersetzen von Objektdateien

So installieren Sie Rclone unter Linux und Unix

So kopieren Sie Dateien unter Linux mit dem CP-Befehl

So kopieren Sie Dateien und Verzeichnisse im Linux-Terminal

Cat-Befehl in Linux:Wesentliche und erweiterte Beispiele

ls-Befehl unter Linux/UNIX

cp-Befehl unter Linux/UNIX