回答:
rm
通常どおり削除できます:rm NameOfFile
。ハードリンクでは、「元のファイル」と「ファイルへのリンク」に区別がないことに注意してください。同じファイルの名前は2つだけで、名前の1つだけを削除してももう1つは削除されません。
sudo
、(スーパーユーザーとして)指定したコマンドで作成した場合は、rootとしてrmする必要があります(使用)。
このスクリプトを使用して、冗長なハードリンクを削除します。しかし、注意してください-それは非常に危険です。
#!/bin/bash
clear
echo Reduce redundant hardlinks in the current folder
echo ------------------------------------------------
echo
echo " $(basename $0) [-R]"
echo " -R means recursive"
echo
read -p "You can break by pressing Ctrl+C"
echo
ask=1
if [ a$1 == "a-R" ]; then recursive=" -R "; fi
for i in $(ls -i $recursive | awk '{print $1}' | uniq --repeated | sort);
do
echo "Inode with multiple hardlinked files: $i"
first=1
for foundfile in $(find . -xdev -inum $i);
do
if [ $first == 1 ]; then
echo " preserving the first file: $foundfile"
first=0
else
echo " deleting the redundant file: $foundfile"
#rm $foundfile
fi
done
if [ $ask == 1 ]; then
read -p "Delete all the rest of redundant hardlinks without asking? y/N "
if [ a${REPLY,,} == "ay" ]; then ask=0; fi
fi
# read -p "pause for sure"
echo
done
echo "All redundant hardlins are removed."
echo
実際にrm
は機能しません:
[user@localhost Products]$ rm AZP/
rm: cannot remove `AZP/': Is a directory
[user@localhost Products]$ rm -r AZP/
rm: cannot remove `AZP': Not a directory
動作するのはunlink AZP
。
AZP/
ディレクトリのように見えますが、rmは再帰フラグなしでディレクトリを操作しません。また、coreutillsのドキュメントによると。>>>ほとんどのシステムでは、ディレクトリへのハードリンクを作成できません。許可されている場合は、スーパーユーザーのみが許可されます(サイクルを作成すると他の多くのユーティリティに問題が発生するため、注意が必要です)。
AZP
がディレクトリ(または他の何か)へのシンボリックリンクであるため、ディレクトリと見なさrm AZP/
れるため機能しませんrm
(/
最後にあるため)。しかし、rm AZP
うまく動作します。-1
リンクのみを削除して元のファイルを保持する場合は、リンク解除を使用する必要があります。
unlink
、名前にもかかわらず、ハードリンクを2つの個別のファイルに分離せず、「リンクされていない」ディレクトリエントリを削除します(ただし、リンクカウントが1を超える限り、file / content / inodeは削除しません)。
ln -n /path/to/file
名前の付いたファイルを作成します。つまり、シンボリックリンクの場合、新しく作成されたハードリンクは、シンボリックリンクのターゲットではなく、そのシンボリックリンクを指します。file
ln --no-dereference /path/to/file
/path/to/file