gpt4 book ai didi

linux - 解压单文件挂起

转载 作者:太空宇宙 更新时间:2023-11-04 11:08:06 25 4
gpt4 key购买 nike

我正在尝试取消存档一个非常大的目录。以下是 untar 整个内容的作用:

$ sudo tar -xjf itunes20140618.tbz --verbose
x itunes20140618/
x itunes20140618/genre_artist
x itunes20140618/imix_type
...etc...

但是,如果我尝试只取消归档一个文件,它会正确地这样做,但是命令将无限期地挂起。此外,在使用 --verbose 语句时它不会打印任何输出。这是一个例子:

$ sudo tar -xjf itunes20140618.tbz itunes20140618/imix --verbose
[ nothing prints...it just hangs. But it does un-tar that single file ]

最佳答案

Tar 没有中央目录;每个文件都串联在一起,一个接一个,因此它会继续扫描文件。提取一个文件所需的时间与提取整个文件所需的时间差不多。根据下面 Mark Plotnick 的评论,在 GNU tar 上,您可以使用 --occurrence=1 让它在找到您的文件后停止扫描。

对于 OS X 和其他有不支持 --occurrence=1 参数的 tar 的地方,一个解决方案是监视文件外观的监视进程,一旦文件大小保持不变几秒钟,终止 tar 进程。这是一个提供该功能的 bash 函数:

untarOneFile () {
options=$1
archivename=$2
filename=$3
if [[ -f "$archivename" ]]; then
rm -rf "$filename" 2> /dev/null
tar "$options" "$archivename" "$filename" &
pid=$!
size=0
quitCount=0
oldsize=0
while true; do
[[ -f "$filename" ]] && size=$(ls -l "$filename" | cut -c 27- | sed 's/^ *//' | cut -f 1 -d ' ')
if (( $oldsize > 0 )); then
if (( $oldsize == $size )); then
(( quitCount++ ))
else
quitCount=0
fi
fi
(( $quitCount == 4 )) && break
oldsize=$size
sleep 0.5
done
kill $pid
else
echo "Archive file not found."
fi
}

错误检查不可靠,但如果您提供合法信息,它就可以工作。用法是:

untarOneFile -jxvf tarArchiveFile.tar.bz file/you/want/to/extract

关于linux - 解压单文件挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24354480/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com