我想删除特定文件的所有硬链接。
用法是script somefile,这将计算文件 somefile 的硬链接,然后将删除仅保留此文件的所有硬链接。
命令
find / -samefile file-name | xargs rm
Run Code Online (Sandbox Code Playgroud)
会做需要的,但这也会删除原始文件。
你也可以使用
find / -inum Inode-number | xargs rm
Run Code Online (Sandbox Code Playgroud)
但这也会删除原始文件。
我的第一个脚本 veriosn 看起来像
#!/bin/bash
file=$1
inode=`ls -li $file | cut -d" " -f1`
find / -inum $inode | xargs rm
Run Code Online (Sandbox Code Playgroud)
但正如我上面所说,这也会删除原始文件,那么如何保留第一个实例并删除其他实例。
您可以使用!原始文件的路径来排除它:
$ find . -samefile bar
./baz
./bar
$ find . -samefile bar ! -path "./bar"
./baz
Run Code Online (Sandbox Code Playgroud)
路径必须与find输出匹配,因此如果您从/.
笔记:
find有一个-delete命令如果与 结合xargs,使用-print0和-0:
find . -samefile bar ! -path "./bar" -print0 | xargs -0 rm
Run Code Online (Sandbox Code Playgroud)使用stat直接获取inode号:
$ stat -c '%i' bar
257643
Run Code Online (Sandbox Code Playgroud)