Pintasan baris perintah untuk direktori saat ini mirip dengan ~ untuk direktori rumah?

24

Ketika saya menggunakan perintah cp atau move di jendela terminal, saya saat ini dengan bash di folder tertentu seperti ini.

NES@server:~/Desktop/dir1$

Dan sekarang saya ingin menyalin file dari sini ~/anotherdir/dir2ke folder yang dipilih saat ini di bash (dir1) saya akan menggunakan perintah

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

apakah ada string pintasan untuk merujuk ke direktori yang dipilih saat ini? Jadi dalam contoh ini saya tidak harus memberikan path lengkap ke direktori target, tetapi perintah tahu itu harus menggunakan direktori yang dipilih saat ini di bash? yaitu sebagai ~ singkatan dari direktori home?

NES
sumber

Jawaban:

42

Direktori Anda saat ini .. Jadi, cp /foo/fam/foo .salin file ke direktori Anda saat ini.

Konstruksi analog untuk "satu direktori ke atas," atau direktori induk dari direktori kerja Anda saat ini, adalah dua titik, yaitu ..,. (Terima kasih @djeikyb.)

Jadi, dari /usr/house/firstfloor/basement, cd ..membawa Anda satu tingkat ke atas /usr/house/firstfloor.

Dalam contoh yang sama (mulai dari /usr/house/firstfloor/basement, perintah cd ../..akan membawa Anda ke /usr/house.

Anda juga dapat menggunakan $PWDdengan echountuk mendapatkan direktori Anda saat ini:

echo $PWD

Kebetulan, $OLDPWDakan memberi Anda direktori sebelumnya. (Yang di dalam bashkamu juga bisa dijangkau dengan mengetik cd -.)

belacqua
sumber
3
Waktu yang baik untuk belajar yang ..berarti satu direktori lebih rendah. Dapat digunakan beberapa kali, yaitucd ../..
djeikyb
1
@dikikb - maksudmu di atas, aku yakin. Jadi, cd ..akan membawa Anda ke direktori induk dari direktori Anda saat ini. Poin bagus.
belacqua
1
Dan saya sebutkan popddan pushditu berubah menjadi sebuah esai.
belacqua
2
Satu perbedaan kecil yang perlu diingat: .dan ..adalah tingkat sistem file, sehingga setiap program akan menerimanya. Di sisi lain, pintasan seperti ~dan ~-merupakan bagian dari shell.
grawity
2
+1 untuk cd -; tidak tahu itu ada.
jg-faustus
6

Anda dapat menggunakan $ (pwd), itu akan menyelesaikan ke output dari perintah pwd.

Contoh:

echo $(pwd)
João Pinto
sumber
1
Atau adil echo $PWD.
ulidtko
3

./ mewakili direktori saat ini. Jadi Anda bisa menggunakan perintah cp ~/anotherdir/dir2/file ./This akan menyalin file "file" ke direktori kerja arus.

binW
sumber
3
Anda tidak perlu tebasan, "." sudah cukup juga. slash (sebagai pembatas komponen jalur) hanya diperlukan jika Anda ingin meletakkan beberapa komponen jalur lain setelahnya, tetapi kemudian lebih mudah untuk hanya meninggalkan ./ karena jalur relatif dimaksudkan dimulai dengan direktori saat ini :)
LGB
saya tahu / tidak diharuskan tetapi. sendirian terasa membingungkan bagi saya karena coz. juga digunakan untuk menjalankan perintah dari file di shell saat ini mis. ". envsetup.sh". Jadi menambahkan a / pada akhirnya hanya membuatnya lebih jelas.
binW
1
Intinya, jika Anda melakukannya ln -s /some/long/path/to/get/to/cake tanpa argumen kedua , itu akan menempatkan caketautan simbolik di arus Anda secara langsung. Sangat bagus untuk yang malas. Menghemat a ..
belacqua
2

Untuk menggunakan direktori saat ini sebagai direktori tujuan gunakan satu titik ' .'

Jawaban panjang

Dengan menggunakan contoh Anda, Anda akan mengetik: cp ~/anotherdir/dir2/file .

Untuk melihat titik ., ..dan ../../nama direktori beraksi, salin dan tempel perintah berikut ke Terminal Anda:

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

Output dari perintah tree muncul seperti ini:

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

3 directories, 3 files

Di .atas output pohon mewakili direktori baru saat ini a yang merupakan kakek dari a/b/cmana kita menavigasi menggunakan cd ../../perintah. Di bawahnya akita melihat sub-direktori a/b, a/b/cdana/b/c2

Analisis baris demi baris

Pertama-tama kami membuat 4 direktori pada satu baris dengan menggunakan &&untuk menggabungkan beberapa baris bersamaan.

Kemudian kami mengubah ke direktori a/b/c, yang merupakan direktori saat ini untuk perintah salin berikut:

  • Pada perintah copy pertama ( cp) kita atur tujuan ke direktori kita saat ini ( c ) dengan ..
  • Pada perintah salin kedua kita mengatur tujuan ke direktori induk ( b ) dengan ...
  • Dalam perintah salin ketiga kita mengatur tujuan ke direktori sibling ( c2 ) dengan../c2

Kemudian, seperti yang dinyatakan sebelumnya, kami mengubah direktori saat ini adan menjalankan treeperintah untuk menampilkan semua direktori dan file di bawah a.

Membersihkan

Setelah selesai, kami menghapus tiga direktori dan file dengan:

cd ~/
rm -r tree
WinEunuuchs2Unix
sumber
1

Anda dapat menggunakan titik ( .), ~+ ekspansi tilde , pwdperintah atau variabel $ PWD untuk mewakili direktori kerja saat ini (CWD). Semua perintah ini dapat melakukannya:

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

Ya (seperti yang lain dicatat), direktori saat ini adalah ".", Itu sebabnya Anda dapat memulai program / skrip dari direktori saat ini dengan ./script (hanya skrip tidak akan berfungsi kecuali. Bukan bagian dari PATH, yang tidak direkomendasikan meskipun). Menggunakan $ PWD atau $ (pwd) sedikit berlebihan, bahkan jika orang lain menyebutkan bahwa, menggunakan karakter titik tunggal lebih pendek, pasti :) ".." adalah direktori induk, pasti "/" adalah root. Juga bagus untuk menyebutkan bahwa "cd -" akan menempatkan Anda di direktori sebelumnya di mana Anda sebelum Anda mengubah cwd (direktori kerja saat ini). Ini bisa juga berguna dalam pekerjaan sehari-hari. Perintah "cd" tunggal tanpa yang lain di baris perintah akan menempatkan Anda ke "~" (rumah Anda).

LGB
sumber
1
$PWD bukan berlebihan ketika membuat symlink ke jalur absolut.
ulidtko
Saya berpikir tentang contoh "cp" di mana itu, pasti. Bahkan dengan symlink tergantung pada situasi: "ln -s / this / file." akan membuat symlink di direktori saat ini menunjuk file / ini / file dengan nama "file" (orang sering berpikir itu seperti dengan "cp" tidak menyalin data, hanya beberapa jenis tautan: itu bukan definisi yang benar tetapi ini awal yang baik ). Namun, konstruksi yang berlawanan: "ln -s. / This / dir" agak menarik (buat symlink sebagai / this / dir dengan referensi untuk direktori saat ini), tapi saya pikir itu di luar lingkup topik asli, dan itu juga bukan pertanyaannya.
LGB