cp adalah salah satu perintah dasar di Unix. Anda sudah tahu bahwa itu digunakan untuk menyalin satu atau lebih file atau direktori dari sumber ke tujuan.
Meskipun tutorial ini untuk pemula, akan sangat membantu bagi semua orang untuk meninjau berbagai opsi perintah cp dengan cepat menggunakan beberapa contoh praktis.
Meskipun Anda selalu menggunakan perintah cp, mungkin satu atau lebih contoh yang dijelaskan di bawah ini mungkin baru bagi Anda.
Bentuk umum perintah salin:
cp [option] source destination
1. Salin file atau direktori dari sumber ke tujuan
Untuk menyalin file, Anda harus meneruskan sumber dan tujuan ke perintah salin. Contoh berikut menyalin file dari project/readme.txt ke projectbackup/readme-new.txt
$ cp project/readme.txt projectbackup/readme-new.txt $ cd projectbackup/ $ ls readme-new.txt
Jika Anda ingin menyalin file dari satu folder ke folder lain dengan nama yang sama, cukup nama direktori tujuan saja seperti yang ditunjukkan di bawah ini.
$ cp project/readme.txt projectbackup/ $ cd projectbackup/ $ ls readme.txt
Sebuah direktori (dan semua isinya) dapat disalin dari sumber ke tujuan dengan opsi rekursif -r seperti yang ditunjukkan di bawah ini:
$ 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. Salin banyak file atau direktori
Anda dapat menyalin lebih dari satu file dari sumber ke tujuan seperti yang ditunjukkan di bawah ini:
$ cd src/ $ cp global.c main.c parse.c /home/thegeekstuff/projectbackup/src/
Jika file sumber memiliki pola yang sama, gunakan wild-card seperti yang ditunjukkan di bawah ini. Dalam contoh ini, semua file ekstensi c akan disalin ke direktori /home/thegeekstuff/projectbackup/src/.
$ cp *.c /home/thegeekstuff/projectbackup/src/
Salin beberapa direktori seperti yang ditunjukkan di bawah ini.
$ cd project/ $ cp -r src/ bin/ /home/thegeekstuff/projectbackup/
3. Cadangkan sebelum menyalin ke tujuan
Jika file tujuan sudah ada dengan nama yang sama, maka cp memungkinkan Anda untuk membuat cadangan file tujuan sebelum menimpanya.
Dalam contoh ini, readme.txt ada di direktori project/ dan projectbackup/, dan saat menyalinnya dari project/ ke projectbackup/, readme.txt yang ada dicadangkan seperti yang ditunjukkan di bawah ini:
$ 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/
File yang ada telah dipindahkan ke readme.txt~ dan file baru disalin sebagai readme.txt seperti yang ditunjukkan di bawah ini.
$ 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~
Berbicara tentang pencadangan, penting bagi Anda untuk memahami cara kerja perintah rsync untuk mencadangkan file secara efektif.
4. Pertahankan tautan saat menyalin
Saat Anda menjalankan perintah cp, jika sumbernya adalah file tautan, maka file yang sebenarnya akan disalin dan bukan file tautan. Jika Anda hanya ingin menyalin tautan apa adanya, tentukan opsi -d seperti yang ditunjukkan di bawah ini:
Berikut ini menunjukkan bahwa tanpa opsi -d, itu akan menyalin file (dan bukan tautan):
$ 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
Untuk mempertahankan tautan saat menyalin, lakukan hal berikut:
$ 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. Jangan menimpa file yang sudah ada
Jika Anda ingin menyalin hanya ketika file tujuan tidak ada, gunakan opsi -n seperti yang ditunjukkan di bawah ini. Ini tidak akan menimpa file yang ada, dan perintah cp akan kembali dengan kode keluar sukses seperti yang ditunjukkan di bawah ini:
$ 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
Seperti yang Anda lihat di bawah, file tujuan tidak ditimpa.
$ cd projectbackup $ ls -l readme.txt -rw-r--r-- 1 bala geek 1038 Jan 8 13:15 readme.txt
6. Konfirmasi sebelum menimpa (mode interaktif)
Saat Anda menggunakan opsi -i, ia akan meminta konfirmasi sebelum menimpa file seperti yang ditunjukkan di bawah ini.
$ cp -i readme.txt /home/thegeekstuff/projectbackup/ cp: overwrite `/home/thegeekstuff/projectbackup/readme.txt'? y
7. Buat tautan keras ke file (bukan menyalin)
Saat Anda menjalankan perintah cp, dimungkinkan untuk membuat tautan keras file (bukan menyalin file). Contoh berikut membuat tautan keras untuk file sample.txt ke dalam direktori 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
Seperti yang terlihat di atas, test/sample.txt adalah file tertaut keras ke file sample.txt dan inode kedua file adalah sama.
8. Buat tautan lunak ke file atau direktori (bukan menyalin)
Saat Anda menjalankan perintah cp, dimungkinkan untuk membuat tautan lunak ke file atau direktori. Dalam contoh berikut, tautan simbolik dibuat untuk libFS.so.6.0.0 sebagai libFS.so,
# 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. Pertahankan atribut file atau direktori saat menyalin
Menggunakan opsi -p, Anda dapat mempertahankan properti file atau direktori seperti yang ditunjukkan di bawah ini:
$ 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
Dimungkinkan juga untuk mempertahankan hanya properti yang diperlukan seperti mode, kepemilikan, stempel waktu, dll.,
Contoh berikut mempertahankan mode file saat menyalinnya:
$ cp --preserve=mode sample.txt test/
10. Salin hanya jika file sumber lebih baru dari tujuan atau hilang
Menyalin tidak memakan banyak waktu untuk file kecil, tetapi mungkin membutuhkan banyak waktu ketika file besar disalin. Jadi, saat menyalin file besar, Anda mungkin ingin memastikan bahwa Anda melakukannya hanya ketika file sumber lebih baru dari file tujuan, atau ketika file tujuan hilang menggunakan opsi -u seperti yang ditunjukkan di bawah ini.
Dalam contoh ini, dua file LICENSE dan readme.txt akan disalin dari project/ ke projectbackup/. Namun, file LICENSE sudah ada di direktori projectbackup/ dan itu lebih baru daripada yang ada di direktori project/.
$ 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
Jadi, dalam contoh ini, tidak perlu menyalin file LICENSE lagi ke direktori projectbackup/. Ini secara otomatis ditangani oleh perintah cp, jika Anda menggunakan opsi -u seperti yang ditunjukkan di bawah ini. Pada contoh di bawah, hanya file readme.txt yang disalin seperti yang ditunjukkan oleh stempel waktu pada file.
$ 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