답변:
아마 당신의 사용입니다 set
. 그러면 '오늘', '='및 date
프로그램 의 출력이 위치 매개 변수 (일명 명령 행 인수)에 지정됩니다. 당신은 C 쉘 (이것을 "bash"로 태그하고 있기 때문에)을 사용하고 싶을 것이다.
today=`date +%Y-%m-%d.%H:%M:%S` # or whatever pattern you desire
등호 주위에 공백이 없는지 확인하십시오.
당신은 또한 &
당신의 진술의 끝에 사용하고 싶지 않습니다 ; 셸이 명령이 완료되기를 기다리지 않습니다. 특히 다음에 의존 할 때. find
는 이전에 시작되기 때문에 명령이 실패 할 수 있습니다 mkdir
.
이 파일의 bash 코드는 a.sh
#!/bin/bash
today=`date '+%Y_%m_%d__%H_%M_%S'`;
filename="/home/el/myfile/$today.ponies"
echo $filename;
실행하면 다음을 인쇄합니다.
eric@dev ~ $ chmod +x a.sh
eric@dev ~ $ ./a.sh
/home/el/myfile/2014_08_11__15_55_25.ponies
코드 설명 :
스크립트를 / bin / bash 인터프리터로 해석하십시오. 오늘이라는 새 변수를 만듭니다. 날짜 명령을 실행하여 Y, m, d, H, M, S 플래그를 전달하여 출력을 구성하십시오. 결과를 날짜 변수에 넣습니다.
filename이라는 새 변수를 만들고 $ today 변수를 나머지 정적 파일 이름 텍스트로 묶습니다. 그런 다음 파일 이름을 화면에 에코하십시오.
lulz를 늘리려면 하나의 라이너로 넣습니다.
echo "/home/el/myfile/`date '+%Y_%m_%d__%H_%M_%S'`.ponies"
여러 가지를 섞은 것 같습니다.
set today = 'date +%Y'
tcsh 구문처럼 보이지만 tcsh에서도 문자열 date +%Y
을 변수에 할당 today
하면 date
명령이 실행되지 않습니다 . bash 또는 다른 POSIX 셸을 사용하고있을 때 할당 구문은 today=some_value
(등호 주위에 공백이 없음)입니다. 명령을 실행하고 출력을 변수에 지정하려면 명령 대체를 사용하십시오 .
today=$(date +%Y-%m-%d)
(날짜 사양도 완성했습니다). 대신 달러 괄호 역 인용 부호를 사용할 수 있지만 앞으로 따옴표 시각적으로 혼동에 발생하기 쉬운, 그리고 당신이 backquoted 명령 안에 따옴표를 필요로 할 때의 규칙은 매우 복잡하고 구현에 의존하는, 그래서에 충실하지 낫다 $(…)
(이 saner 구문과 동일한 효과가 있습니다).
&
여러 명령 끝에 사용 했습니다. 따라서 백그라운드에서 명령이 실행되므로 여기서는 원하지 않습니다. 나는 당신 &&
이 첫 번째 명령이 성공한 경우에만 다음 명령을 실행하는 것을 의미한다고 생각합니다 .
today=$(date +%Y-%m-%d)
mkdir -p The_Logs &&
find …
&&
각 명령 다음 에 사용하는 대안 은로 스크립트를 시작하는 것입니다 set -e
. 이것은 명령이 0이 아닌 상태를 리턴하자마자 ( if
조건의 경우와 몇 가지 다른 경우를 제외하고) 스크립트 실행을 중지하도록 쉘에 지시합니다 .
set -e
today=$(date +%Y-%m-%d)
mkdir -p The_Logs
find …
당신의 find
명령은 훌륭하지만 아마도 당신이하려는 일을하지 않을 것입니다 (그러나 그것이 무엇인지 확실하지는 않지만).
로 디렉토리를 생성 한 mkdir
다음 즉시로 트래버스합니다 find
. 디렉토리가 이미 존재하지 않으면 유용하지 않습니다. 오늘 로그를위한 디렉토리를 만들고 최근 파일을 The_Logs
예를 들어 The_Logs.2012-02-11
?
mkdir -p "The_Logs.$today"
find The_Logs -mtime -1 -exec mv {} "The_Logs.$today" \;
아니면 오늘의 로그 파일 이름을 바꾸어 접미사를 추가 $today
했습니까? 이동하려면 각 파일마다 다른 파일 이름을 계산해야합니다.
find The_Logs -mtime -1 -exec sh -c 'mv "$0" "$0.$today"' {} \;
내가 사용합니다 -mtime
자신의 수정 시간을 기준으로 파일을 이동하지, -atime
그렇지 않은 경우에 atime은 멀리 다시 같은 수 있습니다 - 시스템이 그의를 추적하면 (파일이 마지막으로 읽은 시간이다, mtime).
:
rsync 및 scp에서 호스트로 읽히므로 사용하지 마십시오 . stackoverflow.com/a/37143274/390066