한 서버에서 다른 서버로 웹 사이트를 이동하고 있으며 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'
이것이 효과가 있지만 다소 해키 느낌이 듭니다. 이 작업을 수행하는 더 좋은 방법이 있습니까, 아마도 정식 방법입니까, 아니면 해킹해야합니까?
이것은 Bash에서 GNU 도구를 사용하여 최신 Ubuntu 버전에서 실행 중입니다.
답변
다음 과 함께 -perm
테스트를 사용하십시오 .find
-not
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
각각을 반씩 사용하십시오.
답변
나는 당신의 코드가 무엇을 달성하려고했는지 전혀 모른다. 일반적으로 권한이 잘못된 파일 및 디렉토리를 찾는 이유는 파일 및 디렉토리를 변경하기위한 것입니다.
이것이 우분투 16.04에서 성공적으로 사용하는 것입니다.
find \! -perm 775 -type d -exec chmod 775 {} \;
find \! -perm 664 -type f -exec chmod 664 {} \;
이것은! 탈출되는 상징