%20.png)
次のようなファイル システムがあるとします。
/home/me/dir1/dir2/dir3/dir4/dir5/dir6/file1
次に/home/me/dir1
、 でシンボリック リンクを作成します。
$ cd /home/me/dir1
$ ln -s /home/me/dir1/dir2/dir3/dir4/dir5/dir6 linkdir6
私は、file1 をホーム ディレクトリにコピーしようとしています (これは簡略化した例であり、これよりも複雑です。"/home/me/" は実際にははるかに複雑なディレクトリ構造であるため、"~/" は解決策ではありません)。
$ cd linkdir6
$ cp file1 ../
$ cd ..
$ ls
dir2 linkdir6
ファイル1が見つかりません。検索してみると、/home/me/dir1/dir2/dir3/dir4/dir5/file1
cp
シンボリックディレクトリ内にあることに気付いていなかったようです。
どうすればcp
からシンボリックフォルダーですか?
または、どのようにすれば、参照解除されるcp
のか理解できるでしょうか(../
目的地マニュアルページの が参照されていますか?
何か見落としているのでしょうか? これは可能なのでしょうか?
ありがとう!
(最後の注意 - 実際の使用例は、1 つのシンボリックリンク ディレクトリ内の深いディレクトリ構造で、完全なパスを入力せずにファイル ../another-symlink-directory/ をコピーしようとすることです。これが、私が考えるシンボリック リンクのポイントの 1 つです)
答え1
実際に のリンクをたどっていますcd linkdir6
。実際にそのディレクトリにいるため、 ../ はそこから 1 レベル上の dir5 にあります。
cp を使用する最も安全な方法は、ターゲット ディレクトリにいることであり、その後リンクを使用してソース ファイルにアクセスします。
cd ~/me/dir1 #.. Target
cp linkdir6/file1 .
個人的には、cp の -t (ターゲット) オプションを好みます。
cp -t ~/me/dir1 dir1/linkdir6/file1
答え2
$ cp file1 "$(cd .. && pwd -P)"
見るこの答え。