[linux] BASH에서 mv를 사용하여 파일 이름에 타임 스탬프 추가

글쎄, 나는 리눅스 초보자이고 간단한 bash 스크립트에 문제가 있습니다.

실행되는 동안 로그 파일에 추가하는 프로그램이 있습니다. 시간이 지남에 따라 로그 파일이 커집니다. 각 실행 전에 로그 파일의 이름을 바꾸고 이동하여 프로그램의 각 실행에 대해 별도의 로그 파일을 효과적으로 만드는 시작 스크립트를 만들고 싶습니다. 지금까지 얻은 내용은 다음과 같습니다.

페이스트 빈

DATE=$(date +"%Y%m%d%H%M")
mv server.log logs/$DATE.log
echo program

실행하면 다음이 표시됩니다.

: command not found
program

logs 디렉토리로 이동하여 dir을 실행하면 다음과 같이 표시됩니다.

201111211437\r.log\r

무슨 일이야? 내가 놓친 구문 문제가 있다고 가정하고 있지만 알아낼 수없는 것 같습니다.


업데이트 : 아래 셸터의 의견 덕분에 Windows에서 메모장 ++의 .sh 파일을 편집 한 다음 ftp를 통해 서버로 보내고 ssh를 통해 파일을 실행한다는 사실로 인해 문제가 발생했습니다. . 파일에서 dos2unix를 실행하면 작동합니다.

새로운 질문 : 파일을 다시 보낼 때마다이 수정을 수행하지 않으려면 처음에 파일을 올바르게 저장하려면 어떻게해야합니까?



답변

대본에서 게시 한 몇 줄은 괜찮아 보입니다. 아마도 조금 더 깊은 것 같습니다.

이 오류를 제공하는 줄을 찾아야합니다. set -xv스크립트 맨 위에 추가하십시오 . 이것은 STDERR 에 실행되는 라인 번호와 명령을 인쇄합니다 . 이렇게하면 스크립트에서이 특정 오류가 발생하는 위치를 식별하는 데 도움이됩니다.

BTW, 스크립트 상단에 shebang이 있습니까? 이와 같은 것을 볼 때 일반적으로 Shebang에 문제가 있다고 예상합니다. 예를 들어 #! /bin/bash맨 위에 있지만 bash 인터프리터가에있는 /usr/bin/bash경우이 오류가 표시됩니다.

편집하다

새로운 질문 : 파일을 다시 보낼 때마다이 수정을 수행하지 않으려면 처음에 파일을 올바르게 저장하려면 어떻게해야합니까?

두 가지 방법:

  1. 선택 편집 -> EOL 변환 -> 유닉스 포맷 은 파일을 편집 할 때 메뉴 항목을 선택합니다. 올바른 줄 끝이 있으면 메모장 ++에서 그대로 유지합니다.
  2. 모든 새 파일에 올바른 줄 끝이 있는지 확인하려면 설정-> 기본 설정 메뉴 항목으로 이동 하여 기본 설정 대화 상자를 엽니 다. 새 문서 / 기본 디렉토리 탭을 선택합니다 . 에서 새 문서형식 , 선택 유닉스 라디오 버튼을 누릅니다. 닫기 버튼을 클릭 합니다.


답변

mv server.log logs/$(date -d "today" +"%Y%m%d%H%M").log


답변

bash 내의 한 줄 메서드는 이와 같이 작동합니다.

[일부 출력]> $ (date “+ % Y. % m. % d- % H. % M. % S”). ver

확장자가 ver 인 타임 스탬프 이름으로 파일을 생성합니다. 다음과 같이 날짜 스탬프 파일 이름에 스냅 샷을 나열하는 작업 파일은 작동을 보여줄 수 있습니다.

find . -type f -exec ls -la {} \; | cut -d ' ' -f 6- >$(date "+%Y.%m.%d-%H.%M.%S").ver

물론이야

cat somefile.log > $(date "+%Y.%m.%d-%H.%M.%S").ver

또는 더 간단

ls > $(date "+%Y.%m.%d-%H.%M.%S").ver


답변

간단한 파일 회전에이 명령을 사용합니다.

mv output.log `date +%F`-output.log

로컬 폴더에 2019-09-25-output.log


답변

글쎄, 그것은 당신의 질문에 대한 직접적인 대답은 아니지만, GNU / Linux에는 로그 파일을 정기적으로 회전 시켜서 오래된 파일을 일정한 한계까지 압축하는 도구가 있습니다. 이것의logrotate


답변

메모장에서 스크립트를 작성할 수 있지만 다음을 사용하여 변환하십시오-> $ sed -i ‘s / \ r $ //’yourscripthere

나는 cygwin에서 일할 때 항상 그것을 사용하고 작동합니다. 도움이 되었기를 바랍니다


답변