![擦除外部硬盘上的备份文件](https://linux22.com/image/1040414/%E6%93%A6%E9%99%A4%E5%A4%96%E9%83%A8%E7%A1%AC%E7%9B%98%E4%B8%8A%E7%9A%84%E5%A4%87%E4%BB%BD%E6%96%87%E4%BB%B6.png)
我正在寻找一种方法来从外部硬盘驱动器中删除自动备份文件(格式为“filename.extension~”的文件),我将主磁盘上的备份保存在那里。
如果文件位于 /home,我可以使用 bleachbit 或类似程序(如 ubuntu tweak)删除它们。
可以做到吗?
答案1
这是使用 的命令行方式find
。不过,它比使用 Ubuntu Tweak 之类的 GUI 更高级一些。
找到外部硬盘的挂载点。有几种方法:
- 在文件管理器中,按Ctrl+L可显示基于文本的位置栏。将此绝对位置复制到剪贴板。
在终端中识别硬盘驱动器
cat /proc/mounts
并找到挂载点。例如:/dev/sdc1 /media/1589-880A vfat rw,nosuid,[...]
指示挂载点为
/media/1589-880A
。
打开终端并使用以下
find
命令列表与我们正在执行的搜索相匹配的文件。将/media
此处的路径替换为您在上一步中找到的挂载点。我已添加-type f
到过滤器中文件仅-忽略链接和目录。find /media/1589-880A -name "*~" -type f
如果您对结果感到满意并且确定要删除这些文件,请按如下方式执行删除:
find /media/1589-880A -name "*~" -type f -delete
笔记:这些文件将不是被发送到垃圾箱!它们会立即消失。没有简单的撤销方法。不要要求撤销此操作。
随意修改*~
模式以允许其他用例的其他匹配(例如*.bak
,autobackup-2012-*.tar.gz
等。它只是使用普通的 shell 通配符。完全可以选择子文件夹甚至父文件夹而不是挂载点。无论如何,在删除之前始终先列出!
如果您不确定,可以选择添加-xdev
到命令中以防止其进入其他文件系统。find
答案2
在 shell 的命令行提示符下,你可以使用如下命令
rm -i *~
从当前目录中删除名称以 ~ 结尾的文件。该-i
标志告诉rm
(“remove”命令)在删除之前进行询问。如果您不熟悉使用 shell 命令,请保留该-i
标志,直到您熟悉为止,因为错误位置的空格等小错误可能会造成严重后果。
要列出当前目录中将受影响的文件,您可以说以下任一项。
ls *~
ls -l *~
ls -la *~
要将特定目录设为当前工作目录,请使用命令cd
和目录名称。例如,如果您推断出备份磁盘安装在/media/xyz
(通过cat /proc/mounts
另一个答案中提到的命令,或者更直接地通过mount
不带参数的命令,或通过df
),您会说cd /media/xyz
将备份驱动器的顶级目录设为当前工作目录。
编辑:该rm -i *~
命令仅影响当前目录中的文件,不影响子目录。要处理不确定级别的目录,请使用find
另一个答案中给出的方法。但是,如果您知道目录嵌套的深度,并且级别很浅,则可以使用类似
rm -i *~ */*~ */*/*~
如图所示,这将删除当前目录、其直接子目录及其直接子目录中的 ~ 文件。
编辑2:正如 gertvdijk 在评论中提到的那样,之前编辑中显示的笨拙可以通过使用Bash 4.0+ 递归 shell 通配符rm
来简化(**
1shopt -s globstar
)。输入命令后,独立的 实例**
将以递归方式进行匹配,即代表当前目录及其后代中的所有名称。 (shopt -u globstar
关闭globstar
,但由于不太可能输入**
错误,因此在交互式 shell 中保持打开状态似乎是合理的。)因此,在 之后shopt -s globstar
,命令rm -i **/*~
将删除当前目录及其后代中的 ~ 文件。请注意,如果这些文件名加起来超过几百万个字符,命令行可能会变得太长,bash 无法处理。该find
方法没有这个特殊的限制。