リンク自体を削除せずにシンボリックリンクのターゲットを削除するにはどうすればよいですか?


10

を~/Desktop/test.txt指すシンボリックリンクがあり~/rendu/test.txtます。

のパスしか知りません。シンボリックリンク~/Desktop/test.txtを削除せずにすばやく削除する方法が必要です~/rendu/test.txt。

理由を知りたい人のために:crypted.xxx私のデスクトップには、暗号化され、自分のパスワードを含む名前のファイルがあります。

暗号化されたファイルを更新したい場合は、暗号化を解除crypted.txtして特別なディレクトリに作成します。そのため、私は実際的な理由で、デスクトップにそのファイルへのリンクを作成します。しかしcrypted.txt、私のを確認した後、これをすばやく削除したいと思いますcrypted.txt(デスクトップのリンクは削除しません)。


4
待って、あなたはファイルを削除したい(あなたの質問が示唆するように)またはファイルのコンテンツを削除したい(タイトルsaisとして)
— Jacob Vlijm

ファイルを削除し、シンボリックリンクを保持します。誤解を招く
— 恐れ

2
代わりに、専用のパスワードマネージャを使用することを検討できますか?たとえば、Keepassは非常に優れており、リポジトリにあります。
— evilsoup

回答:


11

を使用findしてシンボリックリンクを検索し、次にを使用readlinkしてターゲットへのフルパスを取得しますrm。

find ~/Desktop/ -type l -name 'test.txt' -exec bash -c 'rm "$(readlink -f "$1")"' _ {} \;

または、すでにリンク名を知っているように:

rm "$(readlink -f ~/Desktop/test.txt)"

4
ただし、相対リンクには注意してください。相対シンボリックリンクは、それが置かれているディレクトリに対する相対パスとして解釈されます。ただし、rmコマンドでは、シェルの現在のディレクトリに対する相対パスとして解釈されます。したがって、そのコマンドがシンボリックリンクが指しているものとは異なるファイルを削除する可能性があります。
— kasperd

5
で@kasperd -f -eまたは-m完全なパスが返され、たとえ相対パスにターゲットシンボリックリンクのポイントなので、はい、その「SAのの場合の懸念rm "$(readlink ~/Desktop/test.txt)"が、使用していません-f -eか-m。
— kos

@kosその通りです。その場合、競合状態が発生する可能性があるかどうかを心配するだけで済みます。
— kasperd

あるいは、この場合は(パスreadlink -f自体がリンクでない場合でも機能する)と同じことを行うrealpathを使用することもできます。
— leftaroundabout

6

単に使用してください:

printf "" > "$(readlink '/path/to/link')"

ファイルをクリアする、または

rm "$(readlink '/path/to/link')"

ファイルを削除します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.