tar 파일이 있는지 확인 |

tar 파일이 있는지 확인 |

생성하려는 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_nametar_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.

보너스로 변수 이름을 줄이는 것을 고려할 수 있습니다.

  1. $wdcd충돌 하지도 않고 예상되는 작업 디렉토리에 대한 좋은 이름입니다.pwd

  2. $f나는 일반적으로 파일이나 "디렉토리 항목"에 대해 마찬가지로 $d디렉토리 피연산자에 사용합니다 .

관련 정보