फ़ाइलों को पुनरावर्ती रूप से अनज़िप और अनज़िप कैसे करें?

मेरे पास एक पर्याप्त डेटा है जिसमें ज़िप के साथ-साथ ज़िप के साथ-साथ rar दस्तावेज़ भी शामिल हैं जो एक लिनक्स बॉक्स में स्थित हैं।

मुझे आम तौर पर एक स्क्रिप्ट या एक-लाइनर की आवश्यकता होती है जो निर्देशिका साइटों के साथ-साथ अनज़िप की खोज करेगा और किसी भी प्रकार के rar या ज़िप को खोजेगा।

2
2022-07-25 17:25:56
स्रोत साझा करें
जवाब: 4

शेल स्क्रिप्ट के साथ इसका कोई उपाय यहां दिया गया है।

संभवतः लिनक्स में एक पुनरावर्ती अनज़िप विकल्प नहीं है: (

2
2022-07-25 19:46:48
स्रोत

ऐसा करने के बारे में सोचने का एकमात्र तरीका यह है कि खोज के साथ कई बार लूप करना है और साथ ही एक पांडुलिपि निष्पादित करना है जो डेटा को उचित रूप से अनपॅक करने के बाद हटा देता है। इसे कई बार उपनिर्देशिकाओं पर जाना होगा, इसलिए यह विशेष रूप से कुशल नहीं है। (प्रत्याशित फ़ाइल नाम शीर्ष पर जीवंत)

पुनरावर्ती_अनपैक

#!/bin/bash
if [ -d "$1" ]; then
   STARTDIR="$1"
else
   echo "starting dir not found: $1"
   exit
fi


COUNTER=1
while [ $COUNTER -gt 0 ]; do
   COUNTER=`find "$STARTDIR" -type f \( -iname '*.zip' -o -iname '*.rar' \) -exec ./unpacker \{\} \; | wc -l`
done

अनपैकर

#!/bin/bash
BASENAME=`basename "$1"`
BASEDIR=`dirname "$1"`

cd "$BASEDIR"
EXT=`echo "$BASENAME" | awk -F . '{print $NF}'`

if [ "$EXT" = "zip" ]; then
  unzip -qq "$BASENAME"
  if [ $? -eq 0 ]; then
     echo "zip unpacked: $1"
     rm "$BASENAME"
  fi
fi

if [ "$EXT" = "rar" ]; then
  unrar e -y -c- -inul "$BASENAME"
  if [ $? -eq 0 ]; then
     echo "rar unpacked: $1"
     rm "$BASENAME"
  fi
fi

करना

chmod u+x recursive_unpack
chmod u+x unpacker

इसे ./recursive_unpack "/my/directory/containing/my/files" . के साथ कॉल करें

  • पुनरावर्ती_अनपैक उसी निर्देशिका में अनपैकर की अपेक्षा करता है
  • unrar और unzip को माउंट करने की आवश्यकता है
  • यदि यह निर्देशिका का पता नहीं लगा सकता है तो यह एक त्रुटि के साथ बाहर निकल जाएगा
  • अनपैकर में मिलते-जुलते संदेशों को न हटाएं, उनका उपयोग लूप को समाप्त करने के लिए अनबॉक्स में फ़ाइलों की दृश्यता की जांच करने के लिए किया जाता है
1
2022-07-25 19:46:48
स्रोत

एक तेज़ - अस्तर, यह निरीक्षण नहीं करता है कि क्या कोई संग्रह वास्तव में पहले ही निकाला जा चुका है:

$ find . -name '*.rar' -execdir unrar e '{}' + && find . -name '*.zip' -execdir unzip -tq '{}' +
1
2022-07-25 19:46:48
स्रोत

शायद dtrx () करेगा, हालांकि मुझे यकीन नहीं है कि यह rar प्रकार को संभालता है या नहीं।

0
2022-07-25 19:35:33
स्रोत

संबंधित सवाल