Monday, September 25, 2017

Serba Serbi Perintah Copy Terminal Linux

cp Command
Copy atau cp adalah perintah harian yang (menurut saya) hampir tidak mungkin ditinggalkan selama melakukan maintain server berbasis linux yang biasanya menggunakan CLI. Tips dan trik menggunakan perintah cp banyak beterbaran di internet. Karena itu saya berinisiatif mendokumentasikan tips dan trik tersebut disini.

Dokumentasi ini tentu berdasarkan pengalaman dan hasil pencarian saya secara pribadi. Sehingga mungkin saja kurang atau mungkin akan berbeda kondisi dengan yang anda alami. Dan berikut adalah dokumentasinya :
Perintah dasar :
cp [param_perintah_opsional] [direktori_atau_file_sumber] [direktori_tujuan]
meng-copy file dengan nama file baru yang sama persis
cp /path/lokasi/file.extensi1 /path/destinasi/
meng-copy file dengan nama file baru yang berbeda
cp /path/lokasi/file.ektensi /path/destinasi/nama_file_baru.ekstensi
meng-copy file yang ada pada workdir
cp file.extensi1 /path/destinasi/
meng-copy folder dan isinya dengan nama folder baru yang sama persis
cp -r /path/lokasi/folder_sumber /path/destinasi/
meng-copy folder dan isinya dengan nama folder baru yang berbeda
cp -r /path/lokasi/folder_sumber /path/destinasi/folder_baru
meng-copy file yang ada pada workdir
cp -r folder_sumber /path/destinasi/
meng-copy file beserta permission yang dimiliki file/folder
cp -ar folder_sumber /path/destinasi/

Perintah-perintah dasar diatas adalah perintah dasar yang umum kita temui pada tutorial di internet. Perintah-perintah diatas menurut saya cukup sederhana dan masih bisa di ingat. Untuk perintah-perintah selanjutnya, saya tidak akan mengubah nama file baru. Sehingga yang diperlukan hanya path destinasi saja. Nah berikut parameter tambahan dan beberapa note yang saya dapatkan selama belajar memanage server menggunakan CLI :

Menampilkan proses copy (bukan progress bar)
untuk file
cp -v /path/lokasi/file.ekstensi /path/destinasi/
untuk folder
cp -vr /path/lokasi/folder_sumber /path/destinasi/
note : Parameter -r  atau -R tidak disertakan untuk file, karena -r berfungsi sebagai perintah recursive copy untuk folder. Sehingga seluruh konten pada folder akan dicopy ke destinasi yang baru. Namun jika parameter ini ditambahkan (mungkin secara tidak sengaja) saat kita melakukan proses copy file/folder, maka tidaklah mengapa.

Mengcopy file/folder dengan menimpa secara paksa
untuk file
cp -f /path/lokasi/file.ekstensi /path/destinasi/
untuk folder
cp -rf /path/lokasi/folder_sumber /path/destinasi/
note : Parameter -f akan menginformasikan pada perintah cp, bahwa proses copy akan menimpa secara langsung (tanpa konfirmasi) file/folder pada path destinasi yang memiliki nama sama persis dengan file/folder sumber.

Pada beberapa distro linux, memiliki konfigurasi perintah cp yang berbeda. Misalnya pada Debian/Ubuntu, perintah cp secara default akan menimpa file/folder meskipun kita tidak menambahkan parameter -f. Sehingga sebelum meng-copy file/folder, pastikan path destinasi aman untuk dijadikan target.

Sedangkan pada Redhat/Centos jika kita tidak menambahkan -f pada perintah command cp, pada saat proses copy jika terdapat file/folder pada path destinasi yang memiliki nama sama dengan file/folder pada path sumber, maka akan muncul pilihan apakah kita yakin akan menimpa file/folder tersebut?


Mengcopy file/folder dengan mengabaikan file yang sudah ada
untuk file
cp -n /path/lokasi/file.ekstensi /path/destinasi/
untuk folder
cp -rn /path/lokasi/folder_sumber /path/destinasi/
note : Parameter -n bisa dibilang adalah kebalikan dari parameter -f, dimana parameter -n akan menginformasikan pada perintah cp, bahwa proses copy akan mengabaikan file/folder pada path destinasi yang memiliki nama sama persis dengan file/folder sumber. Sehingga apabila file destinasi memiliki file/folder yang namanya sama persis dengan file/folder pada path sumber, maka file/folder tersebut akan dibiarkan atau tidak akan ditimpa.

Mengcopy file/folder dengan nama file mengandung spasi dan karakter istimewa.
untuk file
cp /path/lokasi/[\][karakter_istimewa]nama.ekstensi /path/destinasi/
untuk folder
cp -r /path/lokasi/nama_[\][karakter_istimewa]folder /path/destinasi/
contoh implementasi:
cp /home/user/lillahita\'ala /home/new_user/
cp /home/user/file\ baru /home/new_user/
cp -r /home/user/folder\\backslash /home/new_user/
cp -r /home/user/folder\ dengan\ spasi /home/new_user/
note : Nama file dengan Spasi dan atau Karakter istimewa yang dimaksud adalah karakter yang biasanya kurang lazim digunakan pada penamaan file. Karakter-karakter berikut sudah saya coba, dan kita perlu menyisipkan backslash sebelum karakter-karakter pada perintah cp pada shell kita. berikut adalah daftar karakter yang memerlukan backslash :
 ~ : ; \ ' " ? ! $ spasi * ( ) { } [ ] = | `

Mengcopy file/folder dengan nama awal dash (-) pada workdir
untuk file
cp ./--namafile.ekstensi /path/destinasi/
cp /path/sumber/--namafile.ekstensi /path/destinasi/ 
untuk folder
cp -r ./namafolder /path/destinasi/
cp -r /path/sumber/namafolder /path/destinasi/
contoh implementasi:
cp ./--file.docx /home/user/Documentation
cp /home/user/--file.docx /home/user/Documentation
cp -r ./--report-folder /home/user/Documentation
cp -r /home/user/--report-folder /home/user/Documentation

note : Sebenarnya tidak ada masalah jika file/folder tersebut tidak berada pada folder root (/) atau kita mengetikkan full path dari file/folder ketika kita menggunakan command cp. Yang menjadi masalah adalah jika kita akan mengcopy file dengan path yang sama dengan workdir dimana kita berada (bisa kita dicek dengan perintah pwd).

Nama file dengan dash (-) di awal penamaannya memiliki perlakuan khusus. Hal ini dikarenakan dash adalah karakter yang digunakan sebagai "pengenal parameter" pada perintah cp. Sehingga kita perlu menambahkan ./ (penunjuk pada shell bahwa file tersebut ada di workdir yang sama) di awal nama file atau folder yang akan di copy, atau kita bisa memasukkan full path.

Bonus
meng-copy file dengan ekstensi tertentu beserta struktur directory/folder (contoh mengcopy semua file .csv
find . -name '*.csv' -exec cp --parents {} /path/destinasi/ \;
 atau
rsync -a --include '*/' --include '*.csv' --exclude '*' folder_sumber/ /path/destinasi/


No comments:

Post a Comment