+ uniq -c 및 perl 정규식 찾기 및 정렬

+ uniq -c 및 perl 정규식 찾기 및 정렬

/srv/my-old-disk/_oldstuff/일부 오래된 파일/폴더를 에서 으로 복사했습니다 /srv/my-normal-disk/_oldstuff.

이 분석을 어떻게 얻을 수 있나요 /srv/my-old-disk/_oldstuff/?

그런 다음 특정 파일 형식(파일, 디렉터리, 링크) 변경에 대해 원하지 않는 권한(예: 400)을 필수 권한 집합(예: 644) 배치에 어떻게 설정할 수 있습니까?

답변1

+ uniq -c 및 perl 정규식 찾기 및 정렬

일괄적으로 파일 권한 수정

0) 필요한 분석 파일 생성

  • A) find 및 일부 -printf 플래그를 사용하여 목록 가져오기

  • B) 통계 정보를 얻으려면 sort + uniq -c를 사용하세요.

  • C) "일반" 권한이 없는 파일/디렉터리 목록 가져오기

    $ cd /srv/dev-disk-by-uuid-f0233da3-473e-450d-9a18-b2ae254fc439/_get/_move
    
    $ find . -printf "%m %y %p\n" > ~/filelist-1a-perms-type-path-findraw.txt
    
    $ cat ~/list-perms-type-path-findraw.txt | sort > ~/filelist-1b-perms-type-path-sorted.txt
    
    $ find . -printf "%m %y\n" > ~/filelist-1c-perms-type-findraw.txt
    
    $ find . ~/filelist-1c-perms-type-findraw.txt | sort | uniq -c | sort > ~/filelist-1d-perms-type-extraordinary.txt
    
    $ perl -ne 'print if /^(?!755 |644 )/' ~/filelist-1b-perms-type-path-sorted.txt ~/filelist-1f-perms-type-path-extraordinary.txt
    
  • 그러면 다음 샘플 콘텐츠가 포함된 다음 파일을 얻게 됩니다.


~/filelist-1a-perms-type-path-findraw.txt

  • find의 원시 출력입니다.

  • find는 사전식으로 탐색하지 않고 논리적으로 파일 시스템을 탐색한다는 점에 유의하세요. (이 작업을 수행하는 방법을 정확히 설명할 수 있는 사람이 있으면 의견을 남겨주세요.)

    755 d .
    644 f ./Installers-Notes.txt
    644 f ./Installers-Bootdisk.txt
    755 d ./Software
    755 d ./Software/Multiplatform
    644 f ./Software/Multiplatform/.DS_Store
    644 f ./Software/Multiplatform/somesfiles.tgz
    755 d ./Software/Multiplatform/Some Extensions
    644 f ./Software/Multiplatform/Some Extensions/.DS_Store
    644 f ./Software/Multiplatform/Some Extensions/some_plugin.xpi
    ...
    

~/filelist-1b-perms-type-path-sorted.txt

  • 가장 왼쪽 열에서 가장 오른쪽 열로 정렬

  • 먼저 권한을 누른 다음 (파일, 디렉터리, 링크 등)을 입력하고 파일 경로를 입력하세요.

  • 필요한 경우 다른 정렬 순서를 만들 수도 있습니다.

    444 f ./Software/Mac/Software1.zip
    444 f ./Software/Mac/Software5.cdr
    444 f ./Software/Mac/Software7.zip
    ...
    
    640 f ./Software/Mac/Software2.dmg
    640 f ./Software/Mac/Software3/Software3.dmg
    640 f ./Software/Mac/Software4.zip
    640 f ./Software/Mac/Software6.dmg
    640 f ./Software/Mac/Software7.zip
    ...
    

~/filelist-1c-perms-type-findraw.txt

  • 1c는 1d를 생성하기 위한 보조 파일일 뿐입니다.

  • 파이핑으로 바로 건너뛸 수도 있습니다.

  • 하지만 시간이 오래 걸리는 긴 목록의 경우 어딘가에서 실수를 해도 처음부터 다시 생성할 필요가 없는 중간 파일을 선호합니다.

  • 나중에 이를 통해 종료할 수 있습니다.

    755 d
    644 f
    644 f
    755 d
    755 d
    644 f
    644 f
    755 d
    644 f
    644 f
    644 f
    

~/filelist-1d-perms-type-extraordinary.txt

  • 이 파일은 몇 가지 통계를 제공합니다.

  • 이를 기반으로 1f "특별한" 분석 파일에 나열할 일반적이지 않은 파일/폴더를 결정하고 이에 따라 정규식을 조정합니다.

          2 555 f
          6 700 d
          7 645 f
         13 600 f
         20 444 f
         22 700 f
         57 640 f
        124 744 f
        423 777 l
      12315 755 d
      35606 755 f
      60759 644 f
    

~/filelist-1e-perms-type-extraordinary-annotated.txt

  • 이것은 단지 일차원적인 속임수에 귀하의 연구/아이디어에 대한 코멘트를 더한 것입니다.

    # Files:
          2 555 f
          7 645 f
         13 600 f
         20 444 f # Your remark here why this perms good/bad
         22 700 f
         57 640 f
        124 744 f
      35606 755 f
      60759 644 f
    
    # Directories:
          6 700 d
      12315 755 d
    
    # Links:
        423 777 l
    

~/filelist-1f-perms-type-path-extraordinary.txt

  • 이 파일은 권한을 대량으로 변경하는 등 나중에 분석하고 조치를 취하는 데 도움이 됩니다.
  • 이 파일에 대해 얻는 줄은 다음으로 시작합니다.perl -ne 'print if /^(?!755 |644 )/'
  • 정규식 설명:
    • 노선 출발지점^

    • 이것이 뒤따르지 않는다면 (?!expression)소위 Negative Lookahead가 됩니다.

    • 표현식은 755 |(논리적 OR) 입니다.644

    • 숫자 뒤의 공백은 "7550"과 같이 일치하지 않을 수 있는 4자리 권한 표현이 아니기 때문에 필요하지 않습니다. 그러나 나는 그것에 대해 더 확신합니다.

      444 f ./Software/Mac/SoftwareA/File1.bom
      444 f ./Software/Mac/SoftwareA/Fil2.pax.gz
      444 f ./Software/Mac/SoftwareA/File3/Contents/PkgInfo
      444 f ./Software/Mac/SoftwareA/File3/Contents/File1.sizes
      444 f ./Software/Mac/SoftwareA/File3/Contents/File2.plist
      444 f ./Software/Mac/SoftwareA/File3/Contents/File3.info
      ...
      
      
      555 f ./Software/Mac/CategoryA/SoftwareB/README.txt
      555 f ./Software/Mac/_Audio Production Software/Propellerheads Reason 5/Source.nfo
      555 f ./Software/Mac/CategoryA/SoftwareC/Source.nfo
      ...
      
  • 이 파일 목록은 조정이 필요한 디렉터리/파일을 이해하는 데 도움이 됩니다.
  • 또한 찾기를 사용하여 특정 유형(파일/디렉터리/링크)과 특정 권한이 있는 파일 항목을 선택적으로 찾은 다음 원하는 다른 권한으로 변경할 수도 있습니다.

특정 권한 집합이 있는 파일/폴더를 찾아 다른 권한 집합으로 변경

모든 파일에 대한 권한을 444에서 644로 변경한다고 가정해 보겠습니다.

1) 필요하지 않은 특정 권한 집합의 모든 파일을 인쇄하겠습니다.

$ find . -type f -perm 444 -printf "%m %y %p\n"
  • -type f 파일만 찾기
  • -perm 444권한 444 있음
  • -printf우리가 하고 있는 일을 제어하기 위해 적절한 출력을 얻으세요.
    • printf이어야 한다는 점에 유의하세요 .뒤쪽에모든 필터
    • 그렇지 않으면 if 는 지금까지 발생한 내용을 인쇄하지만 다음 필터 체인이 적용된 후에 남은 내용은 인쇄하지 않습니다.
444 f ./Software/Mac/SoftwareA/File1.bom
444 f ./Software/Mac/SoftwareA/Fil2.pax.gz
444 f ./Software/Mac/SoftwareA/File3/Contents/PkgInfo
444 f ./Software/Mac/SoftwareA/File3/Contents/File1.sizes
444 f ./Software/Mac/SoftwareA/File3/Contents/File2.plist
444 f ./Software/Mac/SoftwareA/File3/Contents/File3.info
...

2) 이제 일괄 변경해 보겠습니다.

$ find . -type f -perm 444 -printf "%m %y %p\n" -exec chmod 644 {} \;
  • 우리는 -exec chmod 644 {} \;마지막에 추가했습니다
  • 필터를 통과한 모든 파일에 대해 실행chmod 644
  • 이전 단계와 정확히 동일한 목록을 얻어야 합니다(그 이후로 파일 내용이 변경되지 않은 경우).
  • 오류가 발생하면 추가로 얻을 수 있습니다.

3) 잘 실행되었는지 최종 확인

$ find . -type f -perm 444 -printf "%m %y %p\n"
  • 3단계와 동일한 명령줄
  • 이번에 는 find를 적용한 경로( 당시 현재 작업 디렉터리) .아래에 더 이상 444개의 파일이 없어야 하므로 NULL(파일 목록 없음)을 반환해야 합니다.

관련 정보