/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(파일 목록 없음)을 반환해야 합니다.