Linux에서 기존 파일 이름에 날짜/시간을 추가하는 방법은 무엇입니까?

Linux에서 기존 파일 이름에 날짜/시간을 추가하는 방법은 무엇입니까?

파일 이름에 날짜와 시간을 추가하고 싶습니다. 예를 들면 다음과 같습니다.08032016out.log.zip

이것이 내가 하려는 일이다:

_now=$(date +"%m_%d_%Y")
_file="$_nowout.log"
touch $_file.txt # creating new file with the timedate

datetime을 사용하여 새 파일을 만드는 방법은 무엇입니까?

답변1

이라는 변수를 생성했지만 _now이라는 변수를 참조했습니다 _nowout. 이러한 문제를 방지하려면 중괄호를 사용하여 변수 이름을 구분하세요.

_now=$(date +"%m_%d_%Y")
_file="${_now}out.log"
touch "$_file.txt"

변수 이름 구분 기호가 이미 있으므로 "$_file.txt"그대로 두었 습니다. .의심스러운 경우 "${_file}.txt"에도 사용할 수 있습니다 .

보너스 1: ${varname}Grammarly는 실제로 몇 가지 유용한 기능을 제공합니다.문자열 연산분리 외에도 변수도 제한됩니다.

이점 2: 창의적인 셸 이스케이프 및 인용을 사용하여 변수 이름을 구분할 수도 있습니다. 변수와 문자열 리터럴을 별도로 인용하거나(예: file="$_now""out.log"또는 file="$_now"'out.log') 한 부분을 인용하지 않은 채로 둘 수 있습니다(예: file=$_now"out.log"또는 file="$_now"out.log). 마지막으로 변수 이름 뒤의 단일 문자를 이스케이프할 수 있습니다: file=$_now\out.log. 그러나 쉘 인용 및 이스케이프 규칙을 제대로 이해하지 못한 채 이러한 예제를 재사용하는 것은 권장하지 않습니다.

답변2

변수 이름의 경계를 지정해야 합니다.

_file로 설정되지만 쉘은 의 $_nowout.log의미를 판단할 수 없습니다 .$_now$_nowout

사용

_file="${_now}out.log"

이 변수를 명시적으로 사용하십시오 $_now.

따라서 스크립트는 다음과 같습니다.

_now=$(date +"%m_%d_%Y")
_file="${_now}out.log"
touch "${_file}.txt"

기록을 위해 다음과 같이 단축할 수 있습니다.

touch "$(date +%m_%d_%Y)out.txt"

관련 정보