GNU/Linux >> Belajar Linux >  >> Linux

cp hanya file, melewatkan direktori

Saya menyarankan Anda untuk menggunakan rsync daripada cp, jika Anda bisa memiliki opsi -m yang akan mengecualikan folder kosong, contoh:

rsync -am <origin> <destination>

Penjelasan perintah di explainshell.com

Saya menggunakan opsi -a karena melakukan banyak tindakan default yang bagus, tetapi jika mau, Anda juga dapat menggunakan opsi -r, yang hanya akan menyetel mode rekursif.

[TAMBAHKAN komentar]

Saya tidak tahu cara melakukan ini dengan cp, setidaknya halaman manual tidak menampilkan opsi apa pun yang akan melakukannya untuk Anda. Anda mungkin dapat melakukan solusi yang lebih rumit dengan menggunakan perintah find untuk menemukan daftar file/direktori yang akan disalin, lalu meneruskannya ke cp, tetapi itu akan jauh lebih rumit daripada rsync. rsync bahkan cukup standar di banyak linux


cp memang tidak memiliki opsi untuk mendapatkan file saja, tetapi seperti yang dikatakan berserck, Anda dapat menggunakan find bersama dengan cp . Faktanya, ini sangat mudah:

# Copy only files
find /path/to/file -type f -execdir cp "{}" /dest/path ";"

Atau:

# Copy everything except directories
find /path/to/file -not -type d -execdir cp "{}" /dest/path ";"

Penjelasan

find adalah alat yang akan mencari file yang Anda inginkan. Pada opsi pertama, kita menetapkan -type f untuk mengembalikan hanya file biasa. Pada opsi kedua, kita mengatur -not -type d untuk mendapatkan semuanya kecuali direktori. find mengeksekusi argumen yang diteruskan ke -execdir mengganti {} dengan satu entri hasil sekaligus dan menghentikan perintah saat ; ditemukan (; harus di-escape \; atau ";" , atau shell mungkin mengembangkannya).

-execdir akan menjalankan perintah yang memiliki folder file sebagai "direktori kerja" dan lebih disukai daripada -exec , periksa di bawah.

-type dokumentasi opsi:

-ketik c

File bertipe c:

b:blokir (buffer) spesial

c:karakter (tanpa buffer) spesial

d:direktori

p:bernama pipa (FIFO)

f:file biasa

l:tautan simbolik; ini tidak pernah benar jika opsi -L atau opsi -ikuti berlaku, kecuali tautan simbolik rusak. Jika Anda ingin mencari tautan simbolis saat -L aktif, gunakan -xtype.

s:soket

D:pintu (Solaris)

-not dokumentasi opsi:

! expr

Benar jika expr salah. Karakter ini juga biasanya membutuhkan perlindungan dari interpretasi oleh shell.

-bukan expr

Sama dengan ! expr, tetapi tidak sesuai dengan POSIX.

-execdir dokumentasi opsi:

-exec perintah;

Jalankan perintah; benar jika 0 status dikembalikan. Semua argumen berikut untuk menemukan dianggap sebagai argumen untuk perintah sampai argumen yang terdiri dari ';' dihadapi. String '{}' diganti dengan nama file saat ini yang sedang diproses di mana pun itu muncul dalam argumen untuk perintah [...]. Kedua konstruksi ini mungkin perlu di-escape (dengan '\') atau dikutip untuk melindunginya dari perluasan oleh shell. Perintah yang ditentukan dijalankan sekali untuk setiap file yang cocok. Perintah dijalankan di direktori awal. Ada masalah keamanan yang tidak dapat dihindari seputar penggunaan tindakan -exec; Anda sebaiknya menggunakan opsi -execdir sebagai gantinya.

-execdir perintah;

Seperti -exec, tetapi perintah yang ditentukan dijalankan dari subdirektori yang berisi file yang cocok , yang biasanya bukan direktori tempat Anda mulai menemukan. Ini adalah metode yang jauh lebih aman untuk menjalankan perintah, karena menghindari kondisi balapan selama penyelesaian jalur ke file yang cocok. [...] Jika Anda menggunakan opsi ini, Anda harus memastikan bahwa variabel lingkungan $PATH Anda tidak mereferensikan '.'; jika tidak, penyerang dapat menjalankan perintah apa pun yang mereka suka dengan meninggalkan file dengan nama yang sesuai di direktori tempat Anda akan menjalankan -execdir. Hal yang sama berlaku untuk memiliki entri di $PATH yang kosong atau bukan nama direktori absolut.

https://linux.die.net/man/1/find


Linux
  1. Temukan file dan direktori di Linux dengan perintah find

  2. Salin file &direktori di Linux

  3. Perintah unzip Linux:Opsi untuk memaksa menimpa?

  1. Perintah Untuk Membuat Zip Banyak Direktori Menjadi File Zip Individual?

  2. Perintah Linux:Bagaimana cara 'menemukan' hanya file teks?

  3. Hapus hanya file dalam direktori di direktori BUKAN linux

  1. Cara Menghapus Direktori dan File Menggunakan Linux

  2. Temukan Perintah di Linux (Temukan File dan Direktori)

  3. Perintah 'ls -d' tidak menampilkan direktori. Apakah ada cara untuk mendapatkan 'ls' untuk hanya menampilkan direktori, bukan file dan direktori?