在我的脚本的早期阶段,它需要解压缩用户提供的“x”个文件量。在压缩文件集中,存在名称重复(但它们的内容彼此不同);即 zip1.zip 和 zip2.zip 都包含同名文件“d09483272”。
人们可以通过这样做来解压缩多个文件unzip \*zip -d $M_DIR
,但这对于我的情况来说效率很低,因为新解压缩的文件会覆盖 $M_DIR 位置中已有的文件。
考虑用时间戳解压缩它们 - 一些奇怪的嵌套循环,如下所示(这显然不起作用)
for zip in *zip; do
unzip -l *zip | while read file
do
unzip -p *.zip ${file} > $(date "+%H:%M:%S:%s%N").pdf
done
done
如果这不是一个合适的方法,可能有更简单的方法吗?想法?
答案1
看一下unzip
-manpage:
-n never overwrite existing files. If a file already exists, skip the extraction
of that file without prompting.
答案2
由于时间有限,我匆忙进行了一个不优雅的快速修复。
for zip in $T_DIR*zip; do
unzip $zip -d $M_DIR;
rename "s/.pdf/$(date "+%s%N").pdf/" ${M_DIR}*;
done
每个文件都单独解压缩到$T_DIR
文件夹中,然后在其名称中添加纳秒时间戳。当下一波解压文件进入该$T_DIR
文件夹时,将不再有任何“名称重复”。关于更快/改进的解决方案的想法?
这只适用于“名称重复”文件存在于单独的 zip 文件中的警告。