ホームディレクトリの〜に似た現在のディレクトリのコマンドラインショートカット?


23

ターミナルウィンドウでcpまたはmoveコマンドを使用すると、現在このような特定のフォルダーでbashを使用しています。

NES@server:~/Desktop/dir1$

そして今、私はここからファイル~/anotherdir/dir2をbash(dir1)の現在選択されているフォルダにコピーしたい

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

現在選択されているディレクトリを参照するショートカット文字列が存在しますか?この例では、ターゲットディレクトリへのフルパスを指定する必要はありませんが、コマンドはbashで現在選択されているディレクトリを使用する必要があることを知っていますか?つまり、〜はホームディレクトリを表しますか?

回答:


41

現在のディレクトリは.です。そのためcp /foo/fam/foo .、ファイルを現在のディレクトリにコピーします。

「1つ上のディレクトリ」または現在の作業ディレクトリの親ディレクトリの類似した構造は、2つのドット、つまりです..。(@djeikybに感謝します。)

したがって、から/usr/house/firstfloor/basementcd ..を使用すると、レベルが1つ上がり/usr/house/firstfloorます。

同じ例(から開始)/usr/house/firstfloor/basementで、コマンドcd ../..を実行し/usr/houseます。

$PWDwith echoを使用して現在のディレクトリを取得することもできます。

echo $PWD

ちなみに、$OLDPWD以前のディレクトリが表示されます。(でbash入力することもできますcd -。)


3
学ぶべき時として、それ..は1つ下のディレクトリを意味します。すなわち、複数回使用することができますcd ../..
djeikyb

1
@djeikyb-あなたは上記を意味していると、私は確信しています。したがって、cd ..は現在のディレクトリの親ディレクトリに移動します。いい視点ね。
ベラク

1
そして、私は言及popdしますpushdが、それはエッセイに変わっています。
belacqua

2
:覚えておくための一つの小さな違い...ファイルシステムレベルであるため、任意のプログラムがそれらを受け入れます。一方、~やなどのショートカット~-はシェルの一部です。
grawity

2
+1 cd -; それが存在することを知りませんでした。
JG-ファウスト


3

./は現在のディレクトリを表します。コマンドを使用できます。cp ~/anotherdir/dir2/file ./これにより、ファイル「file」が正しい作業ディレクトリにコピーされます。


3
スラッシュ「。」は必要ありません。十分です。スラッシュ(パスコンポーネントの区切り記号として)は、その後に他のパスコンポーネントを配置する場合にのみ必要ですが、相対パスはいずれにしても現在のディレクトリから始まることを意味しているため、そのままにするのが簡単です:)
LGB

私は知っている/必須ではありませんが。単独では私に混乱を感じますcoz。また、現在のシェルのファイルからコマンドを実行するためにも使用されます(例: "。envsetup.sh")。したがって、最後に/を追加すると、わかりやすくなります。
binW

1
接線方向で、ln -s /some/long/path/to/get/to/cake 2番目の引数なしで行うcakeシンボリックリンクが現在のフローに直接配置されます。怠け者にとても良い。を保存し.ます。
-belacqua

2

現在のディレクトリを宛先ディレクトリとして使用するには、単一のドット「.」を使用します

ロングアンサー

あなたの例を使用すると、次のように入力します。 cp ~/anotherdir/dir2/file .

ドット...および../../ディレクトリ名の動作を確認するには、次のコマンドをコピーしてターミナルに貼り付けます。

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コマンドの出力は次のように表示されます。

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

3 directories, 3 files

.ツリー出力の上部には、新しいカレントディレクトリを表すa の祖父母であるa/b/c私たちが使用してナビゲートどのcd ../../コマンドを。その下aにサブディレクトリa/ba/b/cあり、a/b/c2

行ごとの分析

まず、&&複数の行を結合するために使用して、1行に4つのディレクトリを作成しました。

次に、ディレクトリa/b/cに移動しました。これは、次のコピーコマンドの現在のディレクトリです。

  • 最初のcopyコマンド(cp)で、宛先を現在のディレクトリ(c)に設定し.ます。
  • 2番目のコピーコマンドでは、宛先を親ディレクトリ(b)に設定し..ます。
  • 3番目のコピーコマンドでは、宛先を兄弟ディレクトリ(c2)に設定します。../c2

次に、前述のように、現在のディレクトリをに変更aし、treeコマンドを実行して、すべてのディレクトリとファイルを表示しますa

掃除

完了したら、次の3つのディレクトリとファイルを削除します。

cd ~/
rm -r tree


1

ドット(.)、~+ チルダ展開pwdコマンド、または$ PWD変数を使用して、現在の作業ディレクトリ(CWD)を表すことができます。これらのコマンドはすべてそれを実行できます。

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

0

はい(他の人が述べたように)、現在のディレクトリは "。"です。そのため、。/ scriptを使用して現在のディレクトリからプログラム/スクリプトを起動できます(。がPATHの一部でない限り、スクリプトは動作しません。しかし)。$ PWDまたは$(pwd)を使用することは、1つのドット文字を使用する方が短いことを他の人が言及している場合でも、少しやり過ぎです。確かに、「..」が親ディレクトリであり、「/」がルートです。また、「cd-」を使用すると、cwd(現在の作業ディレクトリ)を変更する前の以前のディレクトリに移動できます。また、毎日の仕事にも役立ちます。コマンドラインに他のコマンドがない「cd」コマンドを1つ入力すると、「〜」(自宅)に移動します。


1
$PWD絶対パスへのシンボリックリンクを作成するときに過剰なことではありません。
ulidtko

確かに「cp」の例について考えました。シンボリックリンクを使用しても、状況によって異なります: "ln -s / this / file"。ファイル/ this / fileを指す現在のディレクトリに「file」という名前のシンボリックリンクを作成します(人々はしばしば「cp」のようにデータをコピーせず、ある種のリンクのみを考えます:それは正しい定義ではありませんが、良いスタートです)。ただし、反対の構造: "ln -s。/ this / dir"はやや興味深い(/ this / dirとしてシンボリックリンクを作成し、現在のディレクトリを参照する)が、元のトピックの範囲外であると思うそしてそれも問題ではなかった。
LGB
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.