Bash
使用單個文件解壓縮存檔並重命名輸出以匹配存檔名稱
目標是解壓縮許多 zip 文件並將生成的文件重命名為原始存檔名稱。
給定一個包含許多 zip 文件的文件夾,其中大多數包含一個名為 的文件
bla.txt
,但當然也有一些例外。眾所周知,每個文件都有一個文件,即 txt 文件。./zips/ a.zip - contains bla.txt b.zip - contains bla.txt c.zip - contains somethingelse.txt d.zip - contains bla.txt ... - ...
輸出應該是
./zips/ a.txt b.txt c.txt d.txt ...
目前最佳鏡頭,它提取了所有內容,但給我留下了大量文件夾:
for z in *.zip; do unzip $z -d $(echo 'dir_'$z); done
也許像
for z in *.zip; do unzip $z; mv 'content_name.txt' $z; done
但是內容名稱是如何獲得的呢?
您可以繼續這個
-d
想法,只需將任何提取的文件重命名為所需的“zip 名稱減去 zip 加 txt”:mkdir tmp for f in *.zip; do unzip "$f" -d tmp && mv tmp/* "${f%.zip}.txt"; done rmdir tmp
或者,您可以將 unzip 的輸出通過管道傳輸到適當命名的文件中:
for f in *.zip; do unzip -p "$f" > "${f%.zip}.txt"; done
該命令
unzip
有其自己的選項unzip -Z1 zipfile.zip
來顯示壓縮文件中的實際壓縮文件名,該zipinfo's
選項-1
採用zipinfo -1 zipfile.zip
. 因此您可以簡單地執行以下操作,無需創建臨時目錄,mv
並將在目前目錄中完成。for z in *.zip; do unzip "$z"; mv "$(unzip -Z1 $z)" "${z%%.*}.txt"; done