当压缩大型目录(即用于备份/操作系统重新安装的主文件夹)时,通常可以排除某些大型文件,例如多 GB 视频。但是,由于主文件夹包罗万象的性质,在开始之前记住可能有用的排除(使用 --exclude)的每个文件通常是不现实的。我正在寻找某种可以给 tar 的输入,告诉它退出它所在的任何文件并移至下一个文件,将退出的文件保留在存档之外。也许像 control-C 一样,但不是停止整个过程,而是简单地停止当前文件。
具体来说,我指的是长时间运行tar -cvf
或tar -cvzf
.由于这两个命令都包含,-v
因此很容易确定 tar 当前所在的文件。
使用任何类型的 GUI 工具都不是一种选择,因为 tar 通常在重新安装之前在损坏的系统上的最小(仅限 CLI)环境中运行。这是我要问的具体案例。
答案1
我认为这是不可能的,但您可能只是简单地从 tar 中自动排除大文件。例如,
find mydir ! -type f -o \( -type f -size -1000k \) | tar cv --no-recursion -T - -f /tmp/tar
它不会保存大于 1000k 的文件。
这是一个交互式请求“n”回复以停止大文件归档的脚本:
find mydir \( -type f -size +1000k -exec /tmp/biggie {} \; \) -o -print |
tar c --no-recursion -T - -f /tmp/tar
/tmp/biggie
脚本在哪里
#!/bin/bash
if ! read -t 10 -n 1 -p "$1 ok ?" reply || [ n != "$reply" ]
then echo >&2
echo "$1"
else echo " ignoring $1" >&2
fi
它执行特定于 bash 的读取,超时为 10 秒 1 个字符 (-n),文件名作为提示符 (-p)。如果您在 10 秒内键入“n”,该文件将被忽略。
答案2
当然,除非程序要求您这样做,否则无法告诉正在运行的程序更改其初始设置。
如果您只是想避免使用大文件,我建议您使用star
而不是您已经使用的非标准 tar。
star -c -f out.tar -find startdir -size -1g
使用适当的大小代替示例中的 1G。
这比使用单独的查找程序调用要快得多,并且可以避免文件名中有趣字符的副作用。