생성하려는 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
디렉토리 피연산자에 사용합니다 .