![如何删除,无需 rm/unlink](https://linux22.com/image/81057/%E5%A6%82%E4%BD%95%E5%88%A0%E9%99%A4%EF%BC%8C%E6%97%A0%E9%9C%80%20rm%2Funlink.png)
与我问的另一个问题相关这里[https://unix.stackexchange.com/questions/253932/rename-folder-with-odd-characters]
我想知道是否可以绕过正常的//rm
二进制文件并使用另一种方法删除文件。也许可以说,通过找出文件或文件夹在磁盘上的确切位置,并将不同的数据写入该位置,擦除文件夹或文件。如何做到这一点,它会导致操作系统或文件系统出现问题吗?rmdir
unlink
或者,是否有一个..我犹豫是否将其称为文件,而是可以使用十六进制编辑器查看和编辑的磁盘区域,例如查找并取消链接对此文件夹/文件的确切引用?那么,是否有针对 HFS+ 和/或 OS X 的不同方法?
EDIT1:我不想删除这里文件的内容,我感兴趣的是使用rm
/之外的方法删除文件和/或文件夹unlink
。我并不是试图从取证意义上删除数据,而是尝试删除一个拒绝删除的文件夹(请参阅上面链接的问题)。
答案1
编辑磁盘映像是可能的,但风险很大。如果您有合适的编辑器可以帮助您完成此操作,那么值得确保您拥有要更改的数据的副本(书面或其他形式)。
最重要的是,在磁盘未卸载且未使用的情况下,不得尝试执行此操作。如果它是您的启动/系统磁盘,则意味着您将必须使用单独的机制来启动,例如救援磁盘。
我首选的基于 Linux 的救援 CD 是系统救援光盘,但不确定它是否包含 HFS 工具(软件包列表表明它可能包含)。这是另一种可能的解决方案,使用标准的 Ubuntu 安装盘,但它是 2009 年的,所以很可能是极其过时。
答案2
如果您不关心原始数据是否继续存在,而只想删除由于字符编码问题而无法直接删除的文件,那么这就是您的解决方案。它涉及使用重命名来重命名文件,以便将它们删除。下面的示例将从当前目录中的所有文件和目录名称中删除所有非 ASCII 字符。
rename 's/[^\x00-\x7F]//g' ./*
rm new-filenames
正则表达式[^\x00-\x7F]
来自于此堆栈溢出问题
要遍历子目录,请使用 find:
find . -exec rename -n 's/[^\x00-\x7F]//g' "{}" \;
删除 -n 标志以让它进行重命名,而不是仅仅告诉您它将重命名哪些文件。