Development Tip

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

yourdevel 2020. 10. 19. 12:53
반응형

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


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


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

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


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

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

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

참고 URL : https://stackoverflow.com/questions/8228047/adding-timestamp-to-a-filename-with-mv-in-bash

반응형