Directory

如何遞歸壓縮所有僅包含文本文件的子目錄

  • January 20, 2014

我從包含數據文件和分析的磁碟備份。目錄結構和名稱並不是真正一致的。為了節省空間,我想壓縮所有僅包含數據(*.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 {} \;

引用自:https://unix.stackexchange.com/questions/104208