statistics
데이터 파일이 주기적으로 저장되는 Ubuntu 서버에 폴더가 있습니다 . 새 파일을 저장하는 데 사용할 수 있도록 폴더를 다시 만들 때 폴더 이름을 어떻게 바꾸나요 statistics
?backup-xx
statistics
폴더의 파일은 statistics
PHP에 의해 생성됩니다 file_put_contents
.
나는 폴더에 많은 파일이 있기 때문에 폴더 이름을 바꾸는 것을 선호합니다 statistics
.
답변1
안 돼요원자적으로한 디렉터리를 다른 디렉터리로 바꿉니다. 이전 디렉터리를 이동하고 새 디렉터리를 만들 수 있습니다.
mv statistics backup-xx
mkdir statistics
statistics
그러나 그것은 존재하지 않는 작은 시간의 창을 남깁니다. 이는 일부 프로세스가 언제든지 디렉터리의 파일을 삭제할 수 있는 경우 문제가 됩니다.
디렉터리를 원자적으로 효과적으로 바꾸려면 기호 링크를 사용해야 합니다. 이름에 처음부터 기간이 포함된 디렉터리를 만듭니다.
mkdir "statistics-$(date +%Y%m%d)"
(또는 디렉토리 명명 규칙을 선택하고 싶습니다). 현재 위치에 대한 고정된 이름을 가진 심볼릭 링크를 만듭니다.
ln -s … statistics
디렉토리를 교체하려면 먼저 새 디렉토리와 새 심볼릭 링크를 만든 다음 이를 이동하여 이전 심볼릭 링크를 덮어씁니다. mv
심볼릭 링크의 일반 텍스트나 일반 텍스트 모두 이 작업을 수행하지 않습니다 . ln -s
대상 디렉터리 내에 항목을 생성합니다. GNU coreutils는 ln -snf
새 심볼릭 링크를 만들기 전에 기존 심볼릭 링크를 삭제하여 경로가 존재하지 않는 작은 시간을 남겨두기 때문에 적합하지 않습니다. mv -T
새 심볼릭 링크에서 GNU coreutils를 사용할 수 있습니다 .
new_dir="statistics-$(date +%Y%m%d)"
mkdir "$new_dir"
ln -s statistics.new
mv -Tf statistics.new statistics
답변2
mv statistics backup-xx && mkdir statistics
그러면 statistics
기존 디렉터리의 이름이 로 변경 되고 backup-xx
, 성공하면 새 디렉터리 생성이 진행됩니다 statistics
.
보다 원자적인 작업을 위해서는 디렉터리 statistics-001
(또는 유사한 형식으로 001
오늘 날짜를 적절한 형식으로 대체)와 다음이라는 심볼릭 링크를 만드는 것을 고려해보세요 statistics
.
mkdir statistics-001
ln -s statistics-001 statistics
새 데이터가 깨끗한 디렉터리에 들어가도록 이 디렉터리를 "회전"하려면 먼저 디렉터리를 만든 다음 statistics
해당 디렉터리에 대한 링크를 다시 만듭니다.
mkdir statistics-002
ln -sf statistics-002 statistics
mv statistics-001 backup-001
이렇게 하면 해당 statistics
디렉터리(즉, 심볼릭 링크가 가리키는 디렉터리) 에 쓰는 모든 프로그램이 해당 디렉터리를 찾지 못합니다 .
지정된 디렉토리에 대한 특별한 권한이나 소유권을 설정해야 하는 경우 statistics
링크를 (재)생성하기 전에 이를 설정하십시오.
1 오히려 이렇게 하면 프로그램이 실행되는 데 걸리는 시간이아니요표준 Unix 도구를 사용하여 효과적인 대상 디렉터리를 최대한 최소화하세요.
답변3
디렉토리 이름을 전혀 바꾸지 마십시오. 파일이 많기 때문에 디렉토리 이름을 바꾸는 것을 선호한다고 말씀하셨습니다. 내가 생각하기에 당신이 이 작업을 원할 것이라고 생각하는 유일한 이유는 파일을 복사하는 데 시간이 너무 오래 걸리기 때문입니다. 하지만,이동하다(즉, 이름 바꾸기) 파일은 동일한 파일 시스템의 위치로 이동하자마자 즉시 완료됩니다. 나는 그것이 당신이 하려는 일이라고 생각합니다. 왜냐하면 파일 시스템을 변경한다면 mv
디렉토리나 그 내용을 이동하는 데 많은 시간이 걸리기 때문입니다.cp
따라서 다음을 수행하십시오.
mkdir backup-xx && mv statistics/* backup-xx
숨겨진 파일도 가져와야 하는 경우 다음을 수행할 수 있습니다.
mkdir backup-xx && mv statistics/* statistics/.* backup-xx
또는 다음을 사용하는 경우 bash
:
shopt -s dotglob; mkdir backup-xx && mv statistics/* statistics/.* backup-xx
이렇게 하면 디렉토리가 항상 존재하지만 간단하고 빠른 작업으로 해당 내용을 이동할 수 있습니다.
답변4
폴더 자체를 이동하는 대신 통계 폴더의 내용을 새로 생성된 디렉터리로 이동할 수 있습니다. 전체 폴더를 이동하는 경우 다른 명령을 실행하여 디렉터리 권한을 변경해야 합니다.
mkdir -p <path>/backup-xxx
mv statistics/* <path>/backup-xxx/.