각 마운트 지점의 백업 tar 파일을 생성하고 있습니다.
/var
/usr/image
/usr/image/temp
다음과 같은 tarname을 만들려고합니다.
backup_var_date.tar
backup_usr_image_date.tar
backup_usr_image_temp_date.tar
아래와 같이 시도했지만 "mv"가 작동하지 않습니다. "$i는 for 루프에서 호출되는 변수입니다."
/bin/tar -cvpzf backup_`echo`mv "$i" "${i//"/"/_}``_`hostname`.`date +%m.%d.%Y`.tar.gz
답변1
이상해 보입니다.
backup_`echo`mv "$i" "${i//"/"/_}``_`hostname`.`date +%m.%d.%Y`.tar.gz
mv
여기에 둥지를 틀고 싶나요 echo
? 명령 대체 구문을 사용하면 $(...)
중첩이 더 쉬워집니다.
backup_$(echo $(mv this that))_$(hostname)...
하지만 출력을 반복할 뿐이고 작동한다면 아무 것도 출력해서는 안 된다는 mv
점은 말할 것도 없고 여기서는 여전히 어떤 용도도 보이지 않습니다 .echo
mv
취소 mv
하고 빌드 파일 이름을 사용하면 ${var//\//_}
변수의 모든 인스턴스가 변경됩니다./
_
따라서 전체 루프에 대해 다음과 같이 보일 수 있습니다.
for path in /var /usr/image /usr/image/temp ; do
x=$(path#/} # remove leading / if there is one
tarfile=backup_${x//\//_}_$(hostname)_$(date +%Y-%m-%d).tar.gz
tar -cvpzf "$tarfile" "$path"
done
참고: 날짜 형식을 에서 으로 변경한 이유 는 후자가 정렬을 더 쉽게 하기 05-17-2017
때문입니다 . 2017-05-17
선행을 제거하는 것은 어쨌든 우리가 원하는 것으로 /
바뀌기 때문에 중복되지만 _
이 방법이 더 구조화되어 있다고 생각합니다.
답변2
탈출할 때 조심해야 합니다. 사용:
"${i//\//_}"