Komutları değil, joker karakterleri genişleten kabuk. Bu yüzden cp dir1/* dir2/*önce iki joker karakteri genişletir, ardından cpsonucu çağırır . Bu görünüşte beklediğiniz hiç değil: zaten var kaç dosya bağlı olarak dir2, dir2/*bir veya birden fazla argüman genişleyebilir. Komut cp, argümanlarından hangisinin ilk kalıbı genişletmekten, hangilerinin ikinci kalıbı genişletmekten geldiğini bilmez. Son argümanının hedef dizinin adı olmasını bekler. Böylece, dizinden tüm dosyaları kopyalamak için dir1dizine dir2, son argüman dizin olmalıdır dir2:
cp dir1/* dir2
Çünkü *tüm dosyalarla eşleşir, tüm dosyaları cpkopyalamaya çalışır. Bu dizinleri içerir: dizinler de dosyalardır. Dizinleri atlar, ancak bir hata bildirir. Adlandırılmış kanallar (bir şey onlara yazması daha iyi olmuş veya cpengellenecek) gibi özel dosyaların içeriğini kopyalar .
Yalnızca normal dosyaları kopyalamak için eşleşmeyi kısıtlamanız gerekir. Zsh'de, bunun için glob niteleyicisini kullanabilirsiniz .:
cp dir1/*(.) dir2
Diğer mermilerinde bu yok. findKomutu dosya türlerine filtre uygulamak için kullanabilirsiniz . Gömülü olmayan bir Linux veya Cygwin kullandığınızı varsayarsak:
find dir1 -maxdepth 1 -type f -exec cp -t dir2 {} +
Linux, FreeBSD ve OSX'te:
find dir1 -maxdepth 1 -type f | xargs -I {} cp {} dir2