a*
Ve *a*
sözdizimi vermeyerek, kabuk tarafından uygulanmaktadır ls
komutu.
Ne zaman yaz
ls a*
Kabuk isteminde, kabuk a*
, geçerli dizindeki adları ile başlayan tüm dosyaların listesini genişletir a
. Örneğin a*
, diziye genişleyebilir a1 a2 a3
ve bunları argüman olarak iletebilir ls
. ls
Komut kendisi asla görür *
karakteri; Sadece üç argüman görür a1
, a2
ve a3
.
Joker karakter genişletme amaçları için "dosyalar", geçerli dizindeki tüm varlıkları ifade eder. Örneğin, a1
normal bir dosya a2
olabilir, bir dizin a3
olabilir ve bir işaret olabilir. Hepsinde rehber girişi var ve kabuğun joker karakter genişletmesi bu girişlerin ne tür bir varlıktan bahsettiği ile ilgilenmiyor.
Pratikte rastlayacağınız tüm kabukları (bash, sh, ksh, zsh, csh, tcsh, ...) joker karakterler uygular. Ayrıntılar değişebilir, ancak *
sıfır veya daha fazla karakter ?
eşleştirmenin ve herhangi bir tek karakteri eşleştirmenin temel sözdizimi makul şekilde tutarlıdır.
Özellikle bash için, bu bash el kitabının "Dosya adı genişletme" bölümünde belgelenmiştir; çalıştırın info bash
ve "Dosya adı genişletme" ifadesini arayın veya buraya bakın .
Bunun kabuk tarafından ve bireysel komutlarla yapılmaması bazı ilginç (ve bazen şaşırtıcı) sonuçlara yol açar. Bu konuda en iyi şey, joker karakter işlemenin (hemen hemen) tüm komutlar için tutarlı olmasıdır ; eğer kabuk bunu yapmazsa, kaçınılmaz olarak bazı komutlar rahatsız olmaz ve diğerleri yazarın "daha iyi" olduğunu düşündüğü ustalıkla farklı şekillerde yapardı. (Windows komut kabuğunun bu sorunu yaşadığını düşünüyorum, ancak daha fazla yorum yapacak kadar aşina değilim.)
Öte yandan, birden fazla dosyayı yeniden adlandırmak için bir komut yazmak zor. Eğer yazarsan:
mv *.log *.log.bak
*.log.bak
Geçerli dizinde zaten mevcut olan dosyalara göre genişletildiğinden , muhtemelen başarısız olacaktır . Böyle bir şey yapan komutlar var, ancak dosyaların nasıl yeniden adlandırılacağını belirlemek için kendi sözdizimlerini kullanmak zorundalar. Bazı komutlar (örneğin find
) kendi joker karakter genişletmelerini yapabilir; kabuğun genişlemesini bastırmak için argümanlardan alıntı yapmalısınız
find . -name '*.txt' -print
Kabuğun joker genişlemesi, tamamen komut satırı argümanının sözdizimine ve mevcut dosya dizisine dayanır. O olamaz komutu anlamı etkilenebilir. Örneğin, tüm .log
dosyaları ana dizine taşımak istiyorsanız, şunu yazabilirsiniz:
mv *.log ..
Eğer unutursanız ..
:
mv *.log
ve .log
şu anki dizinde tam olarak iki dosya var, genişleyecektir:
mv one.log two.log
Bu yeniden adlandırır one.log
ve clobber two.log
.
EDIT : 52 yükseltme, bir kabul ve Guru rozeti sonrasında, belki de başlıktaki soruya cevap vermeliyim.
-d
Ya --directory
seçeneği ls
yalnızca dizinleri listelemek için bunu söylemez. Dizinleri içeriklerini değil, kendileri gibi listelemelerini söyler. Dizine bir argüman adı verirseniz ls
, varsayılan olarak dizinin içeriğini listeler , çünkü genellikle ilgilendiğiniz şey budur. -d
Seçenek, sadece dizinin kendisini listelemesini söyler. Bu, joker karakterlerle birleştirildiğinde özellikle yararlı olabilir. Eğer yazarsanız:
ls -l a*
ls
Size her birinin uzun bir liste verecek dosyanın adı başlar ile a
, ve içerikleri adı başlar her dizinin a
. Dosyaların ve dizinlerin listesini görmek istiyorsanız, her biri için bir satır kullanın:
ls -ld a*
hangi eşdeğerdir:
ls -l -d a*
Unutmayın ki ls
komut asla *
karakteri görmez .
Bunun belgelendirildiği yere gelince, Unix benzeri herhangi bir sistem hakkında komutun man ls
belgelerini size gösterecektir ls
. Çoğu Linux tabanlı sistemlerde, ls
komut GNU coreutils paketinin bir parçasıdır; Eğer varsa info
komutu ya info ls
ya info coreutils ls
size daha fazla kesin ve kapsamlı bir dokümantasyon vermelidir. MacOS gibi diğer sistemler ls
komutun farklı sürümlerini kullanabilir ve bu info
komutu kullanmayabilir; bu sistemler için kullanın man ls
. Ve ls --help
bir gösterecektir nispeten kısa bir kullanım iletisi (sistemimde 117 hat) eğer sen GNU coreutils uygulamasını kullanıyoruz.
Ve evet, uzmanların bile dokümantasyona şimdi ve o zaman danışması gerekiyor. Ayrıca bu klasik şakayı görün .