Bash
解壓縮多個文件而不覆蓋同名文件
在我的腳本的早期階段,它需要解壓縮使用者提供的“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
如果這不是合適的方法,可能有更簡單的方法嗎?想法?
由於時間限制,我匆忙進行了一個不優雅的快速修復。
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 文件中的警告。
看一下
unzip
-manpage:-n never overwrite existing files. If a file already exists, skip the extraction of that file without prompting.