Linux:解压缩存档并将内容重命名为存档名称后跟递增数字

问题描述 投票:0回答:1

我有数百个 .zip 文件位于名为 /zip 的目录中。所有 .zip 文件都有唯一的命名约定。例如:123456_123456.zip

我试图通过命令行完成所有 .zip 文件的任务:

  1. 解压每个档案。 (例如123456_123456.zip等)
  2. 将解压缩的每个文件重命名为存档名称,后跟递增的数字以及文件的原始扩展名。示例:存档内容 = TEST123.pdf、TEST321.csv --> 123456_123456_1.pdf、123456_123456_2.csv
  3. 当脚本移动到另一个存档时,递增的数字应重置为 0。

这是我到目前为止所拥有的。

for z in *.zip;
do 
num=0; 
sudo unzip -njB "$z"; 
sudo mv -b "$(unzip -Z1 $z)" "${z%%.*}_$((++num)).$(unzip -Z1 $z | awk -F'[.]' '{print $2}')";
done

除了处理包含多个文件的档案之外,这似乎有效。 当脚本遇到包含多个文件的存档时,它会抛出错误,例如 mv:cannot stat 'TEST123.pdf TEST321.csv':没有这样的文件或目录。

对于让脚本处理存档中的多个文件有什么建议吗?

linux command-line unzip mv
1个回答
0
投票

您需要第二个 for 循环来提取提取的内容。 (这是假设没有子目录)

for z in *.zip
do 
  num=0; 
  sudo unzip -njB "$z";
  pushd "${z}"
  for a in *
  do 
    sudo mv -b "$(unzip -Z1 $a)" "${a%%.*}_$((++num)).$(unzip -Z1 $a | awk - F'[.]' '{print $2}')";
  done
  popd
done
© www.soinside.com 2019 - 2024. All rights reserved.