2017-03-27 3 views
0

私は、(ほとんど)パスワードとファイルの圧縮と圧縮/アーカイブを自動化するコードを書いています。しかし、コードは私を憎むようです。ジップI/Oエラー:bashスクリプトにそのようなファイルやディレクトリがありません

私はこれを1行ずつ実行しましたが、$file$sourceが正しく有効であっても、常にzipコマンドを実行します。

アイデア?

ここでは、ソース・コードです:

#!/bin/bash 
echo "Drag in the source file" 
read source 
echo 

echo "Drag in the destination file, or press enter to select the Desktop" 
read destination 
echo 

if [ -z "$destination" ] 
then destination="$PWD/Desktop" 
echo "Destination is set to the desktop" 
fi 

echo "Type the name of the file to make" 
read file 

if [ -z "$file" ] 
then file="archive" 
echo "File name set to archive.zip" 
fi 

file="${destination}/${file}" 

if [ -d $"source" ] 
then zip -erj "$file" "$destination" 
else zip -ej "$file" "$destination" 
fi 
+0

ジップはスクリプト内のあなたのパスにない可能性があります。パスがハードコーディングされているかどうか確認してください。そうであれば、スクリプトのパスを設定することができます。 –

+1

'それからdestination =" $ PWD/Desktop "' - これはデスクトップではありません。 '$ PWD'は現在の作業ディレクトリです。何でもかまいません。デスクトップは '$ HOME/Desktop'です。 'zip'が存在しない場合、' zip'は宛先ディレクトリを作成しないので、これはエラーの原因です。また、 'zip'に' $ source'ではなく '$ destination'をアーカイブするように依頼したようです。 – axiac

+0

@axiacありがとう!それはそれを解決したようだ。たぶん私はそれを解決としてマークすることができますので、答えを作成する?また、私は、zipのシンタックスが 'zip destination source'だと確信しています。 –

答えて

1

はあなたのコードに問題がいくつかあります:

​​

$PWDは、現在の作業ディレクトリです。ターミナルを開くとホームディレクトリですが、実行するたびに変更されますcd

デスクトップディレクトリは$HOME/Desktopです。

ホームディレクトリからスクリプトを実行しない場合は、おそらく$PWD/Desktopが存在しないため、エラーの原因になります。 zipは、作成を依頼したアーカイブの保存先ディレクトリを作成しようとしません。ディレクトリが存在しない場合は、エラーメッセージを表示して終了します。

もう一つの問題は、zipの呼び出しである:

if [ -d $"source" ] 
then zip -erj "$file" "$destination" 
else zip -ej "$file" "$destination" 
fi 

あなたはおそらく(それがディレクトリである場合)$sourceディレクトリ内のファイル$sourceやファイルをアーカイブしたいが、あなたが誤ってファイルとして$destinationを置きます/ zipコマンドラインでアーカイブするディレクトリ。

if [ -d $"source" ] - それは"$source"でなければなりません。そうでなければ、引用符は無用であり、$sourceにスペースが含まれていると、スクリプトは構文エラーで終了します。

最後のもの:zipは、1つのファイルのみをアーカイブするように要求されたときにコマンドラインに-rを受け取っても構いません。上記のif/elseブロック全体を1つのコマンドで置き換えることができます。

zip -erj "$file" "$source" 
関連する問題