Komutları değil, joker karakterleri genişleten kabuk. Bu yüzden cp dir1/* dir2/*
önce iki joker karakteri genişletir, ardından cp
sonucu ç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 dir1
dizine dir2
, son argüman dizin olmalıdır dir2
:
cp dir1/* dir2
Çünkü *
tüm dosyalarla eşleşir, tüm dosyaları cp
kopyalamaya ç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 cp
engellenecek) 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. find
Komutu 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