다른 경로의 파일 이름 변경

다른 경로의 파일 이름 변경

동일한 로그 파일의 이름을 다른 경로로 바꾸는 방법을 알고 싶습니다. 즉, 로그 파일은 , /main/rel/1.2등에 있습니다 . 나는 에서 까지의 모든 경로에 대해서만 이 작업을 수행하고 싶습니다./main/rel/1.3/main/rel/1.4/main/rel/1.5/main/rel

가능합니까?

답변1

find이름을 바꿀 모든 파일을 찾고 exec스크립트를 실행하는 데 사용됩니다 :`

 find /main/rel -name file.log -exec mv '{}' '{}.OLD' \;

이것은 발견된 모든 파일에 대해 mvcmd를 실행합니다. {}(쉘이 이상한 일을 하지 않도록 이스케이프 처리됨)은 파일 이름으로 대체됩니다. 이를 통해 .OLD원래 파일 이름에 추가 문자(예: 추가 문자)를 쉽게 추가할 수 있습니다 .

어쨌든 체크아웃은 logrotate당신이 하고 싶은 일을 위해 만들어진 도구입니다. 로그 파일을 회전할 뿐만 아니라(예: ; logfile로 이름 바꾸기, ; 로 logfile.0이동하기 전에 오래된 로그 파일을 압축하여 너무 많은 공간을 차지하지 않도록, 아주 오래된 로그 파일 삭제), 쓰기 작업을 하는 데몬에게 알립니다. 로그 파일에 추가하려면 새 파일로 다시 열어야 할 수도 있습니다(그렇지 않으면 이름을 으로 바꿀 수도 있지만 서버 가 계속해서 ...에 추가되는 것을 알 수 있습니다).logfiles.0logfile.1logfilefoobar.bakfoobar.bak

답변2

아니요, 이 작업을 수행하는 단일 명령은 없다고 생각합니다. 이 파일의 이름을 하나씩 바꿀 수 있습니다.

/main/rel$mv 1.2/somelog 1.2/some_newlog; mv 1.3/somelog 1.3/some_newlog; mv 1.4/somelog 1.4/some_newlog

잠깐만요... 하지만 다음과 같은 작업을 수행하는 스크립트를 작성할 수 있습니다.

#!/bin/bash
for dir in 1.{2..4}
do
    `mv $dir/some.txt $dir/somenew.txt`
done

참고: 위 스크립트는 "/main/rel"에 저장되어야 하며 이 Bash 스크립트는 해당 위치에서만 실행해야 합니다.

관련 정보