list.txt를 기반으로 폴더의 권한을 변경합니다.

list.txt를 기반으로 폴더의 권한을 변경합니다.

SFTP를 통해 다운로드하기 위해 제3자 액세스 권한을 부여해야 하는 다른 많은 폴더가 포함된 3개의 큰 폴더가 있습니다.

현재 홈 디렉터리의 모든 폴더에는 SFTP에 대한 다운로드 권한이 설정되어 있으므로 사용자가 액세스할 수 없는 파일로 list.txt를 만들고 권한을 설정하는 것이 제 생각입니다. 아니면 이 파일을 다른 폴더로 이동하시겠습니까?

문제의 폴더에는 500GB가 넘는 수백만 개의 파일이 포함된 2000개 이상의 폴더가 포함되며 그 중 절반에 대한 액세스 권한을 제거해야 합니다.

폴더 목록 예

(1) some test (2) more test

1. PLANT Madrid Two

2013 Folio ltd

2014-27

201-07-98

3M

3M 4M 5M

3M Comp LTD

5028 - Video

6398SRTTGDS

파일을 새 폴더로 이동하거나 권한을 변경할 수도 있는 bash 스크립트와 비슷한 것을 생각하고 있습니다. 다른 폴더를 다운로드하기 위해 SFTP를 사용하는 데이터, 폴더 및 사용자의 양에 가장 적합한 것은 무엇입니까?

while IFS= read -r dir; do
  mv -t path/to/Deny_folder -R -- "$dir"
done < list.txt

또는

while IFS= read -r dir; do
  chown 700 "$dir"
done < list.txt

답변1

다음과 같이 느린 bash 루프를 피할 수 있는데, 내 테스트에서는 제대로 작동하는 것 같습니다.

$ tr '\n' '\0' <file1 |xargs -0 -I{} mv -vt path/to/deny {}  #v for verbose.
#OR
$ cat file1 |xargs -d'\n' -I{} mv -vit path/to/deny {}  # set delimiter to new line

테스트 실행의 경우 다음과 같은 테스트를 수행할 수 있습니다.

cat file1 |xargs -d'\n' -I{} echo "mv -vt path/to/deny " {}

추신: mvRHEL 및 Debian의 내 명령은 mv의 -R 옵션을 인식하지 못합니다.

이 해결 방법의 한 가지 함정은 파일의 디렉터리 이름에 디렉터리 이름의 일부로 개행 문자가 포함되어 있다는 것입니다. 다른 모든 경우(예: 공백이 있는 디렉터리 이름)에서는 두 버전 모두 테스트되었으며 정상적으로 작동합니다.

루프를 사용하여 수행하려는 경우 파일에서 읽은 각 줄에 대해 mv를 호출하지 않음으로써 속도를 높일 수 있습니다. 배열의 모든 행/디렉토리를 "로드"한 다음 mv를 호출할 수 있습니다. 예를 들면 다음과 같습니다.

$ while IFS= read -r dir; do folders+=("$dir");done < list.txt
$ mv -t path/to/Deny_folder -- "${folders[@]}"  #-R is not available in Red Hat and Debian

또는 일종의 MV 그룹화를 수행할 수도 있습니다.

while IFS= read -r dir; do 
let "a++"
folders+=("$dir")
[ "$a" -gt 1000 ] && mv -vt path/to/Deny_folder -- "${folders[@]}" && a=1 && unset folders 
done < list.txt

답변2

참고: 500GB 디렉터리를 수정하기 전에 작은 샘플 폴더에서 다음을 테스트하겠습니다. 또한 디렉터리를 변경하기 전에 백업해 두겠습니다. 500GB임에도 불구하고 백업을 하는 것은 매우 귀중합니다.

tar -zcvf mybackup.tar.gz big_ol_directory

그런 다음 tar.gz를 로컬 컴퓨터나 네트워크의 다른 컴퓨터, 다른 컴퓨터로 이동합니다. 동일한 위치에 두 개의 백업이 있으면 유용성이 떨어집니다.

권한에 관한 한, 권한에 대한 귀하의 아이디어가 마음에 듭니다. 또 다른 아이디어는 그룹 권한을 사용하여 액세스를 제한하는 것입니다.

# ensure that no one has access except the owner (root, your user, whatever)
chmod -R 600 big_ol_directory

# alternatively
# chown -R myuser:companygroup big_ol_directory
# chmod -R 660 big_ol_directory

# create a group and add a user:
# https://www.howtogeek.com/50787/add-a-user-to-a-group-or-second-group-on-linux/

# begin granting access to ftpusers 
chown -R root:ftpusers big_ol_directory

# use 770, 760, 740 as desired (g+rw is x6x)
chmod -R g+rw big_ol_directory/public

# files in the root of big_ol_directory, including directories
# other than public, will still be owner-editable only.

관련 정보