웹사이트를 한 서버에서 다른 서버로 옮기고 있는데 Git은 파일 권한과 같은 메타데이터를 저장하지 않습니다. 각각 775/664가 아닌 디렉토리와 파일을 찾아야 합니다.
지금은 다음과 같이 잘 짜여진 설정을 사용하고 있습니다.
$ find . -type d -exec ls -la {} \; | grep ^d | grep -v ^drwxrwxr-x
$ find . -type f -exec ls -la {} \; | grep -v ^d | grep -v ^-rw-rw-r-- | grep -v '.git'
이것이 작동하는 동안 나는 그것이 다소 진부하다고 생각합니다. 이를 수행하는 더 좋은 방법이 있습니까? 정식 방법일까요, 아니면 그냥 해킹해야 합니까?
최신 Ubuntu 버전에서 실행되며 Bash에서 GNU 도구를 사용합니다.
답변1
find -type d -not -perm 775 -o -type f -not -perm 664
-perm 775
와 정확히 동일한 권한을 일치시킵니다775
.-perm 664
에서 동일한 작업을 수행합니다664
.-not
(부울 NOT)은 다음 테스트를 무효화하므로 현재와 정반대의 작업을 수행합니다. 이 경우 올바른 권한이 없는 모든 파일입니다.-o
(부울 OR) 두 개의 테스트 세트를 함께 그룹화하여 그 중 하나가 테스트될 때 일치합니다. 우선 순위가 가장 낮으므로 테스트를 두 개의 다른 그룹으로 구분합니다. 당신은 또한 수괄호를 사용하세요더 구체적으로. 여기에서는 권한이 다른 디렉터리775
와 권한이 다른 일반 파일을 일치시킵니다664
.
두 개의 별도 디렉토리 및 파일 명령을 원할 경우 반으로 자르고 -o
각 반을 별도로 사용하십시오.
find -type f -not -perm 664
find -type d -not -perm 775
답변2
귀하의 코드가 무엇을 달성하려고 하는지 모르겠습니다. 권한이 잘못된 파일과 디렉터리를 찾는 이유는 파일과 디렉터리를 변경하기 위한 경우가 많습니다.
이것이 Ubuntu 16.04에서 성공적으로 사용한 것입니다.
find \! -perm 775 -type d -exec chmod 775 {} \;
find \! -perm 664 -type f -exec chmod 664 {} \;
이것은 입증되었습니다! 기호가 이스케이프되었습니다.