私は Ubuntu を使っていますdropbox
。問題は、画像フォルダにハードリンクが多数あるため、同期に問題があることです。
画像を失わずに、簡単なコマンドですべて削除するにはどうすればいいでしょうか? 1つのファイルに対して、次のようなコマンドを見つけました。
find /home -xdev -samefile "filename" | xargs rm
しかし、すべてのファイルに対してこれを行う方法がわかりません。
よろしくお願いします
ファイルシステムに関する情報:
Filesystem Type Size Used Avail Use% Mounted on
udev devtmpfs 7,7G 0 7,7G 0% /dev
tmpfs tmpfs 1,6G 2,4M 1,6G 1% /run
/dev/nvme0n1p3 ext4 435G 203G 211G 50% /
tmpfs tmpfs 7,7G 756M 7,0G 10% /dev/shm
tmpfs tmpfs 5,0M 4,0K 5,0M 1% /run/lock
答え1
ファイルに複数のハード リンクがある限り、ファイルを削除できます。最後のハード リンクが削除されると、データが削除されます。リンクの数はstat -c '%h' {file}
(*) で取得できるため、次のようにして、複数のハード リンクがあるすべてのファイルを消去できます。
for file in *
do
links=$(stat -c '%h' "$file")
[[ -f "$file" ]] && [[ $links -gt 1 ]] && rm "$file"
done
彼らが言うように、結局、一つだけになるディレクトリの処理順序、アルファベット順などに応じて、最後にチェックされたファイルが残ります。
(*) の出力にも表示されますls -l
が、解析が難しくなります...
答え2
削除できます"余分な"すべてのファイルのコピーは次のようになります:
find /home -xdev -type f -links +1 -delete
しかし、それらの余分なコピーの一部は外部の場所にハードリンクされている可能性があることに注意してください。/home
(欠落しているように見える場合があります)。
の-links +1
複数のハードリンクを持つfind
ファイル ( ) のみを選択するように指示します。-type f
(もう少し作業が必要ですが) を使用してfind
各ファイルの inode 値を出力し、結果をソートし、(awk
)を使用して で削除するファイルのリストを書き込むこともできxargs
ますが、そうするとファイル名に特殊文字(空白を含む)が含まれる場合に問題が発生します。しかし、これはファイルが外部にリンクされている場合の驚きを排除する方法です。/home
。
答え3
Unix/Linux/MacOSでは、ディレクトリ内のファイル名は、ディスク上の構造であるinode(間接ノード)を参照します。本当にファイルです。この名前とinodeの関連付けは、ハードリンクとは対照的にソフトリンクこれは本質的に、ファイルを見つけることができる名前を含むファイルです。リンク先のファイルへのパスの一部が名前変更または削除されると、ソフト リンクが壊れる可能性がありますが、1 つのハード リンクの名前を変更または移動しても、他のリンクにはまったく影響しません。
したがって、「元のファイル」は存在しません。全てハード リンクもまったく同じステータスです。inode は、ファイルを参照するハード リンクの数を記録します (ls -l
この数は 2 番目のフィールドに表示されます。通常、ファイルの場合は 1 (リンクは 1 つだけ)、ディレクトリの場合は 2 (親のリンクとディレクトリ自体の '.') です。サブディレクトリがある場合は、それぞれが '..' を介して親を参照するため、カウントが増加します)。リンク カウントが 0 になると、ファイルによって使用されるスペースが再利用されます。