簡體   English   中英

Bash 按文件名將多個文件分組並歸檔到一個 zip 文件中,然后最終移動到另一個目錄的腳本

[英]Bash Script to group multiple file by file name and archiving into one zip file and then finally moving to another dirrectory

zip 多個文件的任何方式,應該只創建一個 zip 文件並移動到另一個目錄

例子:

/tmp/movies/
GOT1.mp4
GOT2.mp4
BREAKINGBD1.mp4

所以我希望所有名稱為GOT的文件都應該壓縮在一個 zip 文件中並移動到另一個目錄( GameOT

所以最后的結果:

/tmp/movies/
BREAKINGBD1.mp4
/tmp/movies/GameOT
GOT.zip

現在使用下面的代碼但是因為這個腳本在另一個目錄中創建了多個 zip 文件並且也沒有移動文件(所有文件仍然存在於同一目錄中)

LIST_OF_FILES=*GOT*
TARGET_DIRECTORY=/tmp 
for filename in $LIST_OF_FILES; do 
    zip_filename=$filename.zip 
    zip $zip_filename $filename 
    mv $zip_filename $TARGET_DIRECTORY 
done 

該腳本將在創建自己的測試文件進行演示時演示全部功能。

#!/bin/sh

dummyInput="dummyInputFiles.list"
dirSRC="${PWD}/movies"

if [ ! -d "${dirSRC}" ]
then
    mkdir "${dirSRC}"
fi

cat>"${dummyInput}" <<EnDoFiNpUt
GOT1.mp4
GOT2.mp4
BREAKINGBD1.mp4
EnDoFiNpUt

while read line
do
    echo "${line}" >"${dirSRC}/${line}"
    sleep 1
done <"${dummyInput}"

( cd "${dirSRC}" ; ls -ltr `cat "${dummyInput}" ` )

### Locate all files matching pattern
for pattern in GOT
do
    TGT=`echo "${pattern}" | sed 's+^GO+GameO+' `
    dirZIP="${dirSRC}/${TGT}"
    if [ ! -d "${dirZIP}" ]
    then
        mkdir "${dirZIP}"
    fi

    if [ ! -d "${dirZIP}" ]
    then
        echo "\t Unable to proceed because directory "${dirZIP}" does not exist.\n" ; exit 1
    fi

    zip --quiet --display-globaldots --dot-size 1m --junk-paths --latest-time --test "${dirZIP}/${pattern}.zip" "${dirSRC}/GOT"*
done

unzip -l -v "${dirZIP}/${pattern}.zip"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM