Directory
如何遞歸壓縮所有僅包含文本文件的子目錄
我從包含數據文件和分析的磁碟備份。目錄結構和名稱並不是真正一致的。為了節省空間,我想壓縮所有僅包含數據(
*.txt
)的子目錄,然後刪除原始文件。壓縮子目錄有幾個執行緒,但不是我所擁有的條件。更準確地說:我不想壓縮所有
*.txt
文件,而是將所有僅包含 txt 文件的目錄壓縮到目錄**.zip中並刪除原始目錄。
此腳本將存檔,然後可選擇刪除所有包含“*.txt”文件的文件夾,僅此而已。
folders=$(find . -type d -exec sh -c 'cd "$1";[ "$(ls *.txt 2>/dev/null)" ] \ && [ -z "$(ls -ad * | grep -v '\.txt$')" ] && echo "$1"' sh {} \;) echo "$folders" | zip -r@ archive && echo "$folders" | while read folder; do echo "will remove $folder" # Uncomment next line for the folder to be removed # rm -rf "$folder" done
編輯:這是一個創建單個 zip 文件的解決方案:
find . -depth -type d -exec sh -c ' cd "$1" || exit [ "$(ls ./*.txt 2>/dev/null)" ] && [ -z "$(ls -ad ./* | grep -v '\.txt$')" ] && ( b=$(basename "$1") cd .. zip -r "$b.zip" "$b" && rm -rf "$b" )' sh {} \;