Pertanyaan Pintasan commandline untuk direktori saat ini mirip dengan ~ untuk direktori home?


Saat saya menggunakan perintah cp atau pindahkan 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/dir2 ke dalam arus folder yang dipilih di bash (dir1) saya akan menggunakan perintah

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

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


22
2018-02-11 13:49


asal




Jawaban:


Direktori Anda saat ini . . Begitu, cp /foo/fam/foo . menyalin file ke direktori Anda saat ini.

Konstruksi analog untuk "satu direktori," 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 level 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 bisa menggunakan $PWD dengan echo untuk mendapatkan direktori Anda saat ini:

echo $PWD

Kebetulan, $OLDPWD akan memberi Anda direktori sebelumnya. (Yang dalam bash Anda juga dapat menjangkau dengan mengetik cd - .)


40
2018-02-11 13:55



Saat yang tepat untuk belajar itu .. berarti satu direktori lebih rendah. Dapat digunakan beberapa kali, yaitu cd ../.. - djeikyb
@djeikyb - yang Anda maksud di atas, saya yakin. Jadi, cd .. akan membawa Anda ke direktori induk dari direktori Anda saat ini. Poin bagus. - belacqua
Dan saya sebutkan popd dan pushd tapi itu berubah menjadi sebuah esai. - belacqua
Satu perbedaan kecil untuk diingat: . dan .. adalah level filesystem, jadi semua program akan menerimanya. Di sisi lain, pintas seperti ~ dan ~- adalah bagian dari cangkang. - grawity
+1 untuk cd -; tidak tahu itu ada. - j-g-faustus


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

Contoh:

echo $(pwd)

6
2018-02-11 13:54



Atau hanya echo $PWD. - ulidtko


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


3
2018-02-11 13:54



Anda tidak perlu slash, "." sudah cukup juga. slash (sebagai path component delimiter) hanya diperlukan jika Anda ingin meletakkan beberapa komponen path lain setelah itu, tetapi kemudian lebih mudah untuk hanya tersisa. / karena path relatif berarti dimulai dengan direktori saat ini pula :) - LGB
saya tahu / tidak diperlukan tapi. sendiri terasa membingungkan bagi saya coz. juga digunakan untuk menjalankan perintah dari file dalam shell saat ini mis. ". envsetup.sh". Jadi menambahkan / pada akhirnya hanya membuatnya lebih jelas. - binW
Secara tegas, jika Anda melakukannya ln -s /some/long/path/to/get/to/cake  tanpa argumen kedua, itu akan menempatkan cake tautan simbolis dalam Anda saat ini secara langsung. Sangat baik untuk yang malas. Menyimpan a . . - belacqua


Untuk menggunakan direktori saat ini karena direktori tujuan menggunakan satu titik '.'

Jawaban panjang

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

Untuk melihat titik ., .. dan ../../ nama direktori dalam tindakan, salin dan tempelkan 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 pohon muncul seperti ini:

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

3 directories, 3 files

Itu . di bagian atas keluaran pohon mewakili direktori saat ini baru a  yang merupakan kakek dari a/b/c yang kami navigasikan untuk menggunakan cd ../../ perintah. Di bawah a kami melihat sub-direktori a/b, a/b/c dan a/b/c2

Analisis baris demi baris

Pertama kami membuat 4 direktori pada satu baris dengan menggunakan && untuk menggabungkan beberapa baris bersama.

Lalu kami pindah ke direktori a/b/c, yang merupakan direktori saat ini untuk perintah penyalinan berikut:

  • Dalam perintah salin pertama (cp) kami menetapkan tujuan ke kami direktori saat ini (c) dengan ..
  • Dalam perintah salin kedua kami mengatur tujuan ke induk direktori (b) dengan ...
  • Di perintah penyalinan ketiga kami menetapkan tujuan ke saudara kandung direktori (c2) dengan ../c2

Kemudian, seperti yang dinyatakan sebelumnya, kami mengubah direktori saat ini menjadi a dan berlari tree perintah untuk menampilkan semua direktori dan file di bawah a.

Membersihkan

Setelah selesai, kami menghapus tiga direktori dan file dengan:

cd ~/
rm -r tree

2
2017-10-23 16:47





Itu variabel lingkungan untuk direktori saat ini adalah $ PWD

echo $PWD

1
2018-02-11 13:59





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

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

1
2018-04-14 09:17





Ya (seperti yang disebutkan orang lain), direktori saat ini adalah ".", Itulah mengapa Anda dapat memulai program / skrip dari direktori saat ini dengan ./script (hanya skrip tidak akan berfungsi kecuali. Bukan bagian dari PATH, yang tidak disarankan meskipun). Menggunakan $ PWD atau $ (pwd) adalah sedikit berlebihan, bahkan jika orang lain menyebutkan itu, menggunakan satu karakter dot 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 juga bisa berguna dalam pekerjaan sehari-hari. Perintah "cd" tunggal tanpa perintah lain di command line akan menempatkan Anda ke "~" (rumah Anda).


0
2018-02-11 14:22



$PWD tidak berlebihan ketika membuat symlink ke path absolut. - ulidtko
Saya berpikir tentang contoh "cp" di mana itu, pasti. Bahkan dengan symlink itu tergantung pada situasinya: "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" hanya tidak menyalin data, hanya semacam tautan: itu bukan definisi yang benar tapi ini awal yang baik ). Namun, konstruksi sebaliknya: "ln -s. / This / dir" agak menarik (buat symlink as / this / dir dengan merujuk untuk direktori saat ini), tapi saya pikir itu di luar lingkup topik asli, dan itu bukan pertanyaan juga. - LGB