[已解决]多个 tarball 的 %prep 要怎么用 %setup 写呢?

假设源文件为:souce0.tar.xz, source1.tar.xz, source2.tar.xz, 软件包为 package-version。 这三个 tarball 解压出来是没有 top-level dir 的,也就是说解压出来是各种文件散落各处,所系希望能够在 %{_builddir}/%{name}-%{version} 下解压。根据 Max RPM ,%setup 加上 -a 选项可以先进入目录再解压指定的 source,但是每次只能解压一个 tarball。该软件包有很多的 tarball,肯定不能一个一个的写啊。有没有其他方法?比如用 for 循环?
如果直接能用 bash 的 for 循环的话,先 cd 进入目标目录,然后:

for tarball in `ls *.tar.xz`
do
  tar xf $tarball
done

这样子也行啊。但是 specfile 不能这么用的啊。Arch 的 PKGFILE 倒是可以。所以有什么办法吗。

没明白这有什么难的。

%setup -T -c 可以创建一个指定文件夹,cd 进去而什么都不干。

至于你的什么 for 循环什么的。到 %{_sourcedir} 去干就行了。

%prep
%setup -T -c %{name}-%{version}
pushd %{_sourcedir}
for i in `ls *.tar.xz` ; do
    tar -xf ${i} -C %{_builddir}/%{name}-%{version}
done
popd
ls -l # 用于甄错
1赞

ok 了,没注意到目录不对。

插嘴说一句,for 循环里不要用 ls ,直接 for tarball in *.tar.xz 就行了。ls 不仅多余,碰到文件名里有空格之类是要吃药的。

了解,不过我确定文件名中没有空格