Komut satırı kısayolu mevcut dizin için ~ dizinine benzer.


24

Terminal penceresinde cp veya move komutunu kullandığımda, şu anda bunun gibi belli bir klasörde bash'ım.

NES@server:~/Desktop/dir1$

Ve şimdi buradan bir dosyayı ~/anotherdir/dir2bash (dir1) içindeki seçili klasöre kopyalamak istiyorum.

cp ~/anotherdir/dir2/file ~/Desktop/dir1

Seçilen dizine atıfta bulunmak için bir kısayol dizgisi var mı? Yani bu örnekte, hedef dizine tam yolu sağlamak zorunda değilim, ancak komut mevcut seçili dizini bash olarak kullanması gerektiğini biliyor. yani ~ ana dizinin anlamı nedir?

Yanıtlar:


42

Şu anki dizininiz .. Böylece cp /foo/fam/foo .dosyayı geçerli dizine kopyalar.

Şu anki çalışma dizininiz için "bir dizin yukarı" veya benzer dizin için benzer yapı iki nokta, yani ... (Teşekkürler @djeikyb.)

Yani, /usr/house/firstfloor/basementcd .., sizi bir seviyeye çıkarır /usr/house/firstfloor.

Aynı örnekte (başlayarak /usr/house/firstfloor/basement, komut cd ../..sizi alır /usr/house.

Geçerli dizininizi almak için $PWDile de kullanabilirsiniz echo:

echo $PWD

Bu arada, $OLDPWDönceki dizinizi vereceğim. (İçinizde hangi bashyazarak da ulaşabilirsiniz cd -.)


3
Öğrenmek için iyi bir zaman, ..bir dizinin daha düşük olduğu anlamına gelir. Birden fazla kez kullanılabilir, yanicd ../..
djeikyb

1
@djeikyb - yukarıda kastediyorsunuz, eminim. Böylece, cd ..sizi geçerli dizininizin ana dizinine götürür. İyi bir nokta.
belacqua

1
Ve söz ediyorum popdve pushden bir deneme dönüşüyor olduğunu ancak.
belacqua

2
Hatırlanması gereken küçük bir fark: .ve ..dosya sistemi düzeyindedir, bu nedenle herhangi bir program bunları kabul eder. Öte yandan, ~ve gibi kısayollar ~-kabuğun bir parçasıdır.
Grawity

2
İçin +1 cd -; var olduğunu bilmiyordum.
jg-faustus

6

$ (Pwd) komutunu kullanabilirsiniz, pwd komutundan çıkan çıktıya çözümlenecektir.

Örnek:

echo $(pwd)

1
Ya da sadece echo $PWD.
ulidtko

3

./ geçerli dizini temsil eder. Yani komutunu kullanabilirsiniz cp ~/anotherdir/dir2/file ./Bu "dosya" dosyasını currect çalışma dizinine kopyalayacaktır.


3
Eğik çizgiye ihtiyacınız yok "." de yeter. onun peşinden başka yol bileşenini koymak istiyorsanız (yol bileşeni sınırlayıcı olarak) çizgi sadece ihtiyaç vardır, ama sonra :) Neyse göreli yollar geçerli dizine ile başlayan içindir beri sadece ./ sola daha kolaydır
LGB

biliyorum / gerekli değil ama. yalnızım bana kafa karıştırıcı hissettiriyor coz. Ayrıca, örneğin ". envsetup.sh" gibi geçerli kabuktaki bir dosyadaki komutları çalıştırmak için de kullanılır. Bu yüzden sonunda bir / eklemek sadece onu daha net hale getiriyor.
BinW

1
Teğetsel olarak, eğer ln -s /some/long/path/to/get/to/cake ikinci bir argüman yapmazsanız , cakesembolik bağı direk olarak aktüelinize koyacaktır . Tembel için çok iyi. Kaydeder ..
belacqua

2

Geçerli dizini hedef dizin olarak kullanmak için tek bir nokta kullanın ' .'

Uzun cevap

Örneğinizi kullanarak şunu yazarsınız: cp ~/anotherdir/dir2/file .

Noktayı görmek için ., ..ve ../../, eylem dizin adları kopyalayıp Terminal aşağıdaki komutları yapıştırın:

mkdir a && mkdir a/b && mkdir a/b/c && mkdir a/b/c2
cd a/b/c
cp /etc/default/grub .
cp /etc/default/grub ..
cp /etc/default/grub ../c2
cd ../../
tree

Tree komutunun çıktısı şöyle görünür:

.
└── b
    ├── c
       └── grub
    ├── c2
       └── grub
    └── grub

3 directories, 3 files

.Ağaç çıkışının üstünde yeni akım dizini temsil a ait büyükbaba olduğunu a/b/ckullandığımız için gidilen hangi cd ../../komutu. Altında abiz alt dizinleri görmek a/b, a/b/cvea/b/c2

Satır satır analiz

İlk önce, &&birden fazla satırı bir araya getirmek için bir satırda 4 dizin oluşturduk .

Sonra a/b/cşu kopya komutlarının geçerli dizini olan dizine geçtik :

  • İlk kopya komutunda ( cp) hedefi şu anki dizinimize ( c ) ile ayarlıyoruz ..
  • İkinci kopya komutunda hedefi ile birlikte ana dizine ( b ) ayarladık ...
  • Üçüncü kopya komutunda hedefi, kardeş dizinine ( c2 ) ile ayarladık.../c2

Daha sonra, daha önce belirtildiği gibi, mevcut dizini değiştirdik ave treealtındaki tüm dizinleri ve dosyaları görüntülemek için komutu çalıştırdık a.

Temizlemek

Yaptıktan sonra, aşağıdaki üç dizini ve dosyayı kaldırıyoruz:

cd ~/
rm -r tree


1

Geçerli çalışma dizinini (CWD) temsil etmek için dot ( .), ~+ tilde genişletme , pwdkomut veya $ PWD değişkenini kullanabilirsiniz. Bütün bu komutlar bunu yapabilir:

  1. mv file_old_dir .
  2. mv file_old_dir ~+
  3. mv file_old_dir $(pwd)
  4. mv file_old_dir $PWD

0

Evet (diğerlerinin de belirttiği gibi), geçerli dizin "." Dir, bu yüzden programları / dizini şu anki dizinden ./script ile başlatabilirsiniz (sadece komut dosyası çalışmaz. gerçi). $ PWD veya $ (pwd) kullanmak, diğerlerinden söz etse bile, tek bir nokta karakteri kullanmaktan daha kısa, elbette :) ".." ana dizindir, elbette "/" köküdür. Ayrıca "cd -" nin sizi cwd'yi (mevcut çalışma dizini) değiştirmeden önceki dizine koyacağından bahsetmek güzel. Günlük işlerde de faydalı olabilir. Komut satırında bir başkası olmayan tek bir "cd" komutu sizi "~" (eviniz) içine koyacaktır.


1
$PWDmutlak yollara sembolik bağlantılar oluştururken fazladan bir not değildir.
ulidtko

Kesin olarak "cp" örneğini düşündüm. Sembolik bağlantılarda bile duruma bağlı olarak: "ln -s / this / file". Geçerli dizinde dosya / this / dosya adı "file" olan bir sembolik bağlantı oluşturacak (insanlar genellikle "cp" ile olduğunu sanıyorlar, sadece veri kopyalamıyorlar, sadece bir çeşit link: doğru bir tanım değil ama iyi bir başlangıç. ). Bununla birlikte, tam tersi yapı: "ln -s. / This / dir" biraz ilginçtir (şu anki dizine atıf yaparak / this / dir ile bir sembolik bağlantı oluşturun), ancak asıl konunun kapsamı dışında olduğunu düşünüyorum. ve bu da soru değildi.
LGB
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.