Saya mencoba menyalin semua file di bawah direktori A ke direktori B. Semua file di dalam direktori A mulai dengan titik, misalnya:
A/.a
A/.b
A/.c
yang saya temukan jika saya gunakan cp A/* B
:, selalu mendapatkan kesalahan:
cp: cannot stat 'A/*': no such file or directory
Tampaknya tidak ada pilihan untuk cp
sebagai ls
untuk menangani entri dimulai dengan dot, ada orang yang tahu bagaimana cara memperbaikinya?
-r
. Tanpa-r
, itu hanya akan melewatkan direktori.-R
harus bekerja dengan baik juga. Jika Anda pikir itu salah, tolong jelaskan mengapa.Jika bash, Anda dapat mengatur
dotglob
sebelum Anda menyalinAtau bahasa pemrograman
Jika Anda tidak ingin mengatur dotglob, cukup
sumber
A
yang disembunyikan. Dia hanya ingin menyalinnya.Apa yang Anda cari lebih sesuai:
Ini akan cocok dengan semua file dot, tetapi tidak "." atau "..". Sebagian besar solusi di atas baik-baik saja selama Anda tidak bekerja secara rekursif. Tetapi segera setelah Anda ingin melakukan sesuatu seperti:
Tanpa menghilangkan ".." Anda akan menyalin semuanya dari direktori induk ke bawah, termasuk non-dotfile.
sumber
.a
atau.x
. Pola globbing terpendek Saya telah menemukan bahwa pertandingan setiap titik berkas kecuali.
dan..
adalah.[^.]*
.Saya justed mencoba yang berikut ini dan berhasil hanya menemukan ...
sumber
A/.
danA/..
sebagai parameter untukcp
, yang bisa bermasalah jika OP juga perlu menyalin direktori (menggunakancp -r
)Itu bukan
cp
's kesalahan , itu bash: pesta mengembang*
di semua non-tersembunyi (yaitu: non awal dengan.
) file.Bash akan berkembang
.*
(dengan demikianA/.*
, dalam kasus Anda) dengan semua file yang dimulai dengan.
, tetapi sayangnya itu juga termasuk.
dan..
(direktori sekarang dan induk) yang Anda mungkin ingin lewati. (Perhatikan bahwa shell lain, seperti zsh, tidak akan memasukkannya, dan IIRC juga bash, setelah mengatur beberapa opsi).Solusi mudah bisa dengan menghapus
.
dan..
dari file yang cocok dengan.*
, dengan cara (sangat) seperti ini:atau yang ini (mungkin lebih bersih: digunakan
find
untuk mencari file yang akan disalin):tetapi Anda mungkin akan menemukan solusi yang lebih bersih.
sumber
for loop
dan kemudian membuatgrep
proses tambahan hanya untuk melakukan pekerjaan seperticp A/.*
?cp
akan mengabaikan "." dan ".." direktori.Jika semuanya dimulai dengan titik, cukup gunakan
A/.*
:Semoga ini membantu!
sumber
Anda dapat menggunakan skrip ini
sumber
salinan:
daftar:
daftar file tanpa direktori menurun:
sumber
Anda harus mengecualikan. dan .. dari daftar file yang diteruskan ke cp!
Ini aman:
sumber
Ini adalah utas lama ... tapi saya selalu bisa menyalin semua file. Termasuk file / folder yang dimulai dengan '.'
Contoh akan menyalin semua file dan folder:
cp -aup /root/.* / backup / root /
sumber