저는 .zip 파일과 .tar.gz 파일이 포함된 스크립트를 작성 중입니다. 파일을 추출해야 해요. tar.gz에 tar를 사용하고 zip 파일에 대해 압축을 푸는 방법을 알고 있지만 확장명에 따라 결정을 내리는 방법은 모르겠습니다. tar.gz에서 작동하는 스크립트를 작성했습니다. 여기에 스크립트가 있습니다.
#!/bin/bash
echo "Evaluate Lab"
select yn in "Yes" "No";
do
case $yn in
Yes )
echo "Evaluating!!"
#choose file
file="$(ls | head -1)"
echo $file
mkdir temp
echo "Decompressing file $file"
#Decompress chosen tar.gz to temp
tar -xf "$file" --directory temp
cd temp/
#Do some work here
#get out of temp folder
cd ../
rm -rf temp
echo "Moving $file to done"
mv "$file" ../done/
echo "Evaluate another"
echo "1) Yes 2) No"
;;
No )
echo "Exiting...."
exit;;
*)
echo "Enter right option";;
esac
done
tar.gz와 zip을 모두 처리해야 합니다. 어떤 팁이 있나요?
답변1
다음은 스크립트의 변형입니다.
#!/bin/sh
mkdir -p "done"
for file in ./*.tar.gz ./*.zip; do
printf 'Press Enter to process %s, or Ctrl+C to quit\n' "$file"
read bogus
tmpdir=$(mktemp -d)
printf 'Decompressing %s into %s\n' "$file" "$tmpdir"
case $file in
*.tar.gz) tar -xz -f "$file" -C "$tmpdir" ;;
*.zip) unzip "$file" -d "$tmpdir" ;;
esac
(
cd "$tmpdir"
# do work here
)
rm -rf "$tmpdir"
mv "$file" "done"
done
현재 디렉토리의 모든 파일을 반복합니다 .tar.gz
. .zip
각 파일에 대해 임시 추출 디렉토리가 생성되고 mktemp -d
파일 이름 접미사를 사용하거나 이를 기반으로 파일이 추출됩니다.tar
unzip
cd
추출된 데이터에 대해 수행해야 하는 주변 서브셸 및 기타 작업을 사용하면 디렉터리 변경을 건너뛰고 시작한 곳으로 다시 돌아갈 수 있습니다(변경된 작업 디렉터리는 서브셸의 로컬 디렉터리입니다).
여기서 가장 중요한 것은 case ... esac
진술이라고 생각합니다. 이는 문자열이 일치하는 패턴에 따라 다양한 작업을 수행하는 방법입니다.
또한보십시오: