![Linux에서 기존 파일 이름에 날짜/시간을 추가하는 방법은 무엇입니까?](https://linux55.com/image/85137/Linux%EC%97%90%EC%84%9C%20%EA%B8%B0%EC%A1%B4%20%ED%8C%8C%EC%9D%BC%20%EC%9D%B4%EB%A6%84%EC%97%90%20%EB%82%A0%EC%A7%9C%2F%EC%8B%9C%EA%B0%84%EC%9D%84%20%EC%B6%94%EA%B0%80%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
파일 이름에 날짜와 시간을 추가하고 싶습니다. 예를 들면 다음과 같습니다.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"