私は.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
文だと思います。これは、文字列が一致するパターンに応じてさまざまな操作を実行する方法です。
また見なさい: