まずはテスト用の移動元ディレクトリとハードリンク化されるファイルを作成。
$ rm -fr ./mnt/sdb1/rdfind_test_dir $ mkdir -p ./mnt/sdb1/rdfind_test_dir $ for I in $(seq 0 1); do echo 1 > ./mnt/sdb1/rdfind_test_dir/rdfind_test_file${I}; done;
rdfind でファイルをハードリンク化し、結果を確認。これでテスト対象の作成完了。
$ rdfind -makehardlinks true ./mnt/sdb1/rdfind_test_dir Now scanning "./mnt/sdb1/rdfind_test_dir", found 2 files. Now have 2 files in total. Removed 0 files due to nonunique device and inode. Now removing files with zero size from list...removed 0 files Total size is 4 bytes or 4 b Now sorting on size:removed 0 files due to unique sizes from list.2 files left. Now eliminating candidates based on first bytes:removed 0 files from list.2 files left. Now eliminating candidates based on last bytes:removed 0 files from list.2 files left. Now eliminating candidates based on md5 checksum:removed 0 files from list.2 files left. It seems like you have 2 files that are not unique Totally, 2 b can be reduced. Now making results file results.txt Now making hard links. Making 1 links. $ ls -li ./mnt/sdb1/rdfind_test_dir total 8 56041475 -rw-r--r-- 2 **** **** 2 Feb 11 09:56 rdfind_test_file0 56041475 -rw-r--r-- 2 **** **** 2 Feb 11 09:56 rdfind_test_file1
ハードリンク化されたファイルを含むディレクトリを対象にmvすると以下。リンク同士の関係性は保たれているのでOK。
$ mv ./mnt/sdb1/rdfind_test_dir ./mnt/sdd1/ $ ls -li ./mnt/sdd1/rdfind_test_dir total 8 169918466 -rw-r--r-- 2 **** **** 2 Feb 11 09:56 rdfind_test_file0 169918466 -rw-r--r-- 2 **** **** 2 Feb 11 09:56 rdfind_test_file1
ハードリンク化されたファイルをそれぞれ指定してmvすると以下。リンク同士の関係性は保たれているのでOK。
$ mkdir -p ./mnt/sde1/rdfind_test_dir $ mv ./mnt/sdd1/rdfind_test_dir/rdfind_test_file* ./mnt/sde1/rdfind_test_dir/ $ ls -li ./mnt/sde1/rdfind_test_dir total 8 111149058 -rw-r--r-- 2 **** **** 2 Feb 11 09:56 rdfind_test_file0 111149058 -rw-r--r-- 2 **** **** 2 Feb 11 09:56 rdfind_test_file1
ハードリンク化されたファイルの一つをmvで移動して、更にもう一つを別のインスタンスでmvすると、リンク同士の関係性がなくなるのでNG。
$ mkdir -p ./mnt/sdf1/rdfind_test_dir $ mv ./mnt/sde1/rdfind_test_dir/rdfind_test_file0 ./mnt/sdf1/rdfind_test_dir $ mv ./mnt/sde1/rdfind_test_dir/rdfind_test_file1 ./mnt/sdf1/rdfind_test_dir $ ls -li ./mnt/sdf1/rdfind_test_dir total 8 106168322 -rw-r--r-- 1 **** **** 2 Feb 11 09:56 rdfind_test_file0 106168323 -rw-r--r-- 1 **** **** 2 Feb 11 09:56 rdfind_test_file1
同じinodeを持つファイルを同じ移動先に移動する場合はいいけど、同じinodeを持つファイルを移動前に検索しておく必要があるし、ファイルごとに移動先を変えたい場合は要注意だなぁ。