Saya terkejut baru-baru ini ketika saya melakukan sesuatu sepertimv ./* ../somedirectory
dan menemukan file seperti .gitignore
tidak dipindahkan.
Saya melakukan sebagian besar pekerjaan saya di zsh di OS X, dan kejutan ini menggigit saya di bash di CentOS. Saya mencoba bash di OS X dan menemukan perilaku yang sama:*
tidak cocok dengan file titik. Ini tampaknya sangat tidak diinginkan bagi saya, tetapi ternyata ini adalah bash default. (Ini mungkin default zsh juga untuk semua yang saya ingat, tetapi saya mungkin telah mengubahnya bertahun-tahun yang lalu di .zshrc saya dan lupa bahwa itu pernah bekerja secara berbeda.)
Bagaimana saya bisa mengonfigurasi bash untuk berperilaku seperti yang saya harapkan:untuk * agar cocok dengan semua file, dan tidak mengabaikan file titik.
Jika ini sama sekali tidak jelas, berikut cara mereproduksinya
cd /tmp
mkdir {t,d}est
touch test/{.,}{1,2,3,4,5,6,7}
ls -hal test
mv test/* dest
ls -hal test # notice dot files are still there
ls -hal dest # notice only some files were mv'ed
Jawaban yang Diterima:
Bash
Seperti yang sudah Anda perhatikan bash tidak akan cocok dengan .
di awal nama atau garis miring. Untuk mengubah pencocokan mengenai titik, Anda harus mengatur dotglob
opsi – man bash:
dotglob If set, bash includes filenames beginning with a `.' in the results of pathname expansion.
Untuk mengaktifkan/mengaturnya dengan bash gunakan shopt
, misalnya:
shopt -s dotglob
Untuk zsh Anda juga dapat menggunakan dotglob
opsi tetapi tetapi Anda harus menggunakan setopt
untuk mengaktifkannya, mis:
setopt dotglob