最初; 通常のハードリンクではなく、シンボリックリンクを使用する必要がある理由はありますか?相対パスを持つシンボリックリンクの必要性を理解するのに苦労しています。この問題を解決する方法は次のとおりです。
Debian(Ubuntu)バージョンのfdupesは、-L
オプションを使用して重複をハードリンクに置き換えることができると思いますが、これを確認するためのDebianインストールがありません。
-L
オプションのあるバージョンがない場合は、commandlinefuで見つけたこの小さなbashスクリプトを使用できます。
この構文はbashでのみ機能することに注意してください。
fdupes -r -1 path | while read line; do master=""; for file in ${line[*]}; do if [ "x${master}" == "x" ]; then master=$file; else ln -f "${master}" "${file}"; fi; done; done
上記のコマンドは、「パス」内のすべての重複ファイルを検索し、それらをハードリンクに置き換えます。これを確認するにls -ilR
は、iノード番号を実行して調べます。以下に、10個の同一ファイルのサンプルを示します。
$ ls -ilR
total 20
3094308 -rw------- 1 username group 5 Sep 14 17:21 file
3094311 -rw------- 1 username group 5 Sep 14 17:21 file2
3094312 -rw------- 1 username group 5 Sep 14 17:21 file3
3094313 -rw------- 1 username group 5 Sep 14 17:21 file4
3094314 -rw------- 1 username group 5 Sep 14 17:21 file5
3094315 drwx------ 1 username group 48 Sep 14 17:22 subdirectory
./subdirectory:
total 20
3094316 -rw------- 1 username group 5 Sep 14 17:22 file
3094332 -rw------- 1 username group 5 Sep 14 17:22 file2
3094345 -rw------- 1 username group 5 Sep 14 17:22 file3
3094346 -rw------- 1 username group 5 Sep 14 17:22 file4
3094347 -rw------- 1 username group 5 Sep 14 17:22 file5
すべてのファイルには個別のiノード番号があり、個別のファイルになっています。次に、それらを重複排除します。
$ fdupes -r -1 . | while read line; do j="0"; for file in ${line[*]}; do if [ "$j" == "0" ]; then j="1"; else ln -f ${line// .*/} $file; fi; done; done
$ ls -ilR
.:
total 20
3094308 -rw------- 10 username group 5 Sep 14 17:21 file
3094308 -rw------- 10 username group 5 Sep 14 17:21 file2
3094308 -rw------- 10 username group 5 Sep 14 17:21 file3
3094308 -rw------- 10 username group 5 Sep 14 17:21 file4
3094308 -rw------- 10 username group 5 Sep 14 17:21 file5
3094315 drwx------ 1 username group 48 Sep 14 17:24 subdirectory
./subdirectory:
total 20
3094308 -rw------- 10 username group 5 Sep 14 17:21 file
3094308 -rw------- 10 username group 5 Sep 14 17:21 file2
3094308 -rw------- 10 username group 5 Sep 14 17:21 file3
3094308 -rw------- 10 username group 5 Sep 14 17:21 file4
3094308 -rw------- 10 username group 5 Sep 14 17:21 file5
ファイルはすべて同じiノード番号を持つようになりました。つまり、それらはすべてディスク上の同じ物理データを指します。
これがあなたの問題を解決するか、少なくともあなたを正しい方向に向けることを願っています!
v1.51
(Ubuntuの14.04.2 LTS)。