775 / 664 이외의 권한이있는 디렉토리 및 파일 찾기


21

한 서버에서 다른 서버로 웹 사이트를 이동하고 있으며 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 버전에서 실행 중입니다.

답변:


39

다음 과 함께 -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각각을 반씩 사용하십시오.


아름답습니다, 감사합니다! 나는 두 가지 다른 조건 (예 : -d 및 type -f)을 설정할 수 있다는 것을 알지 못했고 -perm에 대해 알지 못했습니다.
dotancohen

아마도 -notPOSIX 표준이 아닙니다. 그들은 !대신 사용 합니다.
user1404316

2

나는 당신의 코드가 무엇을 달성하려고했는지 전혀 모른다. 일반적으로 권한이 잘못된 파일 및 디렉토리를 찾는 이유는 파일 및 디렉토리를 변경하기위한 것입니다.

이것이 우분투 16.04에서 성공적으로 사용하는 것입니다.

find \! -perm 775 -type d -exec chmod 775 {} \;
find \! -perm 664 -type f -exec chmod 664 {} \;

이것은! 탈출되는 상징


실제로 목표는 파일의 권한을 변경하는 것이 아니라 프로덕션 웹 서버에 파일을 업로드 할 때 눈송이 권한이 필요한 파일을 식별하는 것이 었습니다. 감사.
dotancohen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.