私はUbuntuを使用していますdropbox
。問題は、私の写真フォルダに多くのハードリンクがあり、同期の問題があることです。
写真を失うことなく簡単なコマンドでどのようにすべて削除できますか?単一ファイルに対して次のコマンドが見つかりました。
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(間接ノード)を表します。本物ファイルです。これらの名前とインデックスノードの関連付けを呼び出します。ハードリンクそしてソフトリンクこれは本質的にファイルを見つけることができる名前を含むファイルです。リンクしようとしているファイルへのパスの一部を削除または名前を変更すると、ソフトリンクが壊れる可能性がありますが、1つのハードリンクの名前を変更または移動しても他のリンクにはまったく影響しません。
したがって、「オリジナルファイル」は存在せず、みんなハードリンクはまったく同じ状態を持ちます。 inodeはファイルを参照するハードリンクの数を記録します(ls -l
この番号を2番目のフィールドとして表示します。ファイルの場合は通常1(単一のリンク)、ディレクトリの場合は通常2(親リンクと「.」)リンク)ディレクトリ自体です。; ; サブディレクトリがある場合、各サブディレクトリは親ディレクトリを参照するため、数が増加します。