Bagaimana cara menyalin file tersembunyi dan subdirektori tersembunyi (yang dimulai dengan titik) di folder A ke folder B? Sebagai contoh jika saya memiliki struktur ini:
A/a
A/b
A/.a
A/.b/
A/.b/somefile
A/.b/.c
Saya ingin menyalin ke B hanya file yang tersembunyi dan subdirektori tersembunyi di A:
B/.a
B/.b/
B/.b/somefile
B/.b/.c
Saya sudah mencoba perintah ini: cp A/.* B
dari pertanyaan pengguna super ini . Namun, itu tidak menyalin subdirektori. Juga mencoba cp -r A/.* B
, tetapi salinan .
jadi saya akhiri dengan salinan tepat A (termasuk file normal). Bantuan apa pun dihargai.
sumber
..c
,..*[^.]
tetapi kemudian Anda akan kehilangan file yang diakhiri dengan.
. Saya pikir Anda memang perlu globbing diperpanjang untuk benar-benar menjelaskan semua kasus.Masalah dengan
A/.*
adalah bahwa ada direktori.
diA
mana juga cocok pola.Anda dapat mengaktifkan pola gumpal diperpanjang dan menggunakan yang berikut:
Ini cocok dengan file yang namanya dimulai dengan titik dan karakter kedua yang bukan titik atau tidak sama sekali (? (.) Tidak cocok dengan titik,! (...) meniadakannya, yaitu! (? (.)) Cocok dengan yang lainnya daripada tidak sama sekali atau titik).
sumber
.!(@(|.))
(AFAICT) sama dengan di atas, (IMNSHO) sedikit lebih jelas, dan hanya satu karakter yang lebih panjang.Untuk kasus seperti ini akan merekomendasikan menggunakan
find
daripadacp
seperti ini:Sintaks dasarnya rusak seperti ini:
find A/ -type f
:find
item dalam direktoriA/
yang tipenya adalah file (bukan direktori) ...-maxdepth 1 -name '.*'
: Untuk ini untuk satumaxdepth
dari 1 direktori dan yangname
dimulai dengan.
.-exec cp -p {} B/ \;
: Dan sekali file-file ini ditemukan,exec
yangcp
perintah dengan-p
bendera untuk melestarikan tanggal / waktu dari sumber ({}
) ke tujuanB/
.Saya suka menggunakan
maxdepth
untuk menambahkan lapisan kontrol jadi saya tidak sengaja menyalin seluruh sistem file. Tapi jangan ragu untuk menghapusnya.sumber
find A -type d
menyediakan daftar rekursif dalam A dengan hanya direktorigrep -E "\."
memfilter direktori dengan titik (yaitu: direktori tersembunyi)cp -r
untuk menyalin secara rekursifSaya telah membuat struktur file dan folder untuk A dan menjalankan perintah di Git Bash (Saya tidak menggunakan linux sekarang) dan berhasil.
sumber
A B
, dan kemudian akan bertindak secara tak terduga karena akan berkembang menjadicp -r A B/.dotfile B
. Saran umum adalah jangan menguraikanfind
atauls
menghasilkan sama sekali. Jika Anda menggunakan,find
Anda juga harus menggunakan opsi sendiri untuk memfilter daripadagrep
, dan jika Anda mem-pipefind
output di tempat lain, gunakan-print0
, atau langsung panggil perintah yang Anda inginkan. Lihatfind
manualnya .extglob
diatur).find
parsing itu.Sebagai alternatif, Anda dapat menggunakan perintah lain ini jika karakter kedua adalah alfanumerik ( sumber ):
sumber
.@foo
atau..c
.