Shell-Script

檢查文件是否為存檔;如果是,提取

  • March 6, 2018

如何檢查文件是否為存檔,然後使用 提取它7z?我知道我可以通過file命令檢查它,但由於它的輸出,它在腳本中不起作用。我無法預測它可能是什麼類型的存檔。我只想做類似的事情:

7z可以解壓嗎?

如果是,提取,

如果不是,進一步

通過 bash 腳本。

如果它執行的操作失敗,該7z實用程序將返回一個非零退出程式碼。您可以使用此事實來嘗試提取存檔,然後在失敗時執行其他操作:

if ! 7z e filename 2>/dev/null; then
   # do something else
fi

或者,取決於您還想做什麼,或者不做什麼,

if 7z e filename 2>/dev/null; then
   exit
fi

# do something else

可以縮短為

7z e filename 2>/dev/null && exit

# do something else

你顯然可以把它包起來

if 7z t filename; then

fi

並擷取提取失敗(由於磁碟空間不足或提取期間可能發生的任何其他錯誤)與確定這確實是7z檔案的失敗分開。

完整的程式碼可能看起來像

if 7z t filename 2>/dev/null; then
   if 7z e filename 2>/dev/null; then
       echo 'All is good, archive extracted' >&2
   else
       echo 'Archive failed to extract' >&2
   fi
else
   echo '7z failed to process the file' >&2
fi
filename=/tmp/foo.gz

if 7z t $filename; then
   7z e $filename
else
   echo $filename not an archive.
fi

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