作成したいtarファイルがすでに存在するかどうかをテストしようとしています。そうでなければtarファイルを生成したいです(コードのこの部分はうまくいきます)。ただし、tarファイルのファイル名が存在するかどうかをテストするifステートメントは機能しません(tarファイルが存在するかどうかを実際にテストせずにtarファイルがすでに存在していても、elseステートメントに直接ジャンプするだけです)。どんなアイデアがありますか?
注:fire_dir_nameは圧縮したいファイルの名前です(例:myfile1.txt)。
#create variable for new name of file/dir
date=$(date +"%Y%m%d")
new_name="$file_dir_name.$date"
file_name="$new_name.tar"
echo $file_name
#check if tar file exists already
if [ -f "$file_name" ]
then
echo "$file_name" exists
else
# create tar file
tar -cvf $dir_path/$new_name.tar $file_dir_name -C $dir_path
答え1
ここで重要なのは、作成中の同じファイル名をテストする必要があることです。
#check if tar file exists already
if [ -f "$file_name" ]
then
...
else
# create tar file
tar -cvf "$file_name" ...
...
fi
file_name
また、フルパスになることができない理由もありません。
file_name="$dir_path/$new_name.tar"
ディレクトリを変数名に入れると、エラーが発生する可能性が低くなります。変数tar_name
などtar_path
を呼び出す方が良いスタイルです。
答え2
該当する条項を見逃した部分を無視すると、fi
電話する前に問題の本質が変わりますtar
。
欲しいと仮定
というファイルを作成します。
$newname
ディレクトリエントリの場合
$file_dir_name
~へ
$dir_path
cd
そのフラグから始める必要があります$dir_path
。そのフラグが移植可能かどうかはわかりませんが、-C
最新のpax
コマンドには複雑さを減らす明確な理由はありません。
フラグの使用には別の問題があります-C
。 $dir_pathが相対的な場合、誤った場所にtarballが生成されます。
$file_name
ファイルの存在確認が失敗した理由は、そのファイルが存在する必要があるディレクトリに変更していないためです。
次に、出力先をtarballのファイル名として指定し、asオペランドをコマンド$file_dir_name
として指定します。tar/pax
拡張コマンド:
...
#check if tar file exists already
cd "$dir_path"
if [ -f "$file_name" ]
then echo "$file_name" exists
else
pax -w -f "$file_name" "$file_dir_name"
## alternatively, with tar:
# tar cf "$file_name" "$file_dir_name"
fi
この時点で、私は変数名があまりにも$file_name
一般的でした$tarball
。
ボーナスで変数名を減らすことを検討できます。
$wd
cd
競合せずに予想される作業ディレクトリの良い名前です。pwd
$f
私は通常、ファイルや「ディレクトリエントリ」のようにディレクトリ$d
オペランドに使用します。