Linux 터미널에서 800 파일의 chmod 444


0

나는 디렉토리에 거의 800 개의 파일이 /storage/있습니다. 그리고 현재 800 개의 .dat파일이 -rw-rw-r--있습니다. 모든 파일을 읽기 전용 모드로 변경하고 싶습니다. 나는 이것을 시도했다 :

find /storage/ -name "*.dat" | xargs chmod 444

로컬 컴퓨터에서 10 또는 20 개의 파일에 적합합니다. 그러나 서버로 ssh하고 800 파일에 대해 동일한 명령을 수행하면 20 분이 걸리고 명령이 여전히 실행 중입니다.

구체적이고 빠른 방법이 있습니까? 모든 파일이 로컬 컴퓨터가 아니라 호스트 된 서버에 있습니다.

이 800 개의 파일은 각각 30Gb입니다.

답변:


0

주요 차이점은 검색 시간이 훨씬 더 클 수 있다는 것 /storage입니다. 서버의이 폴더에 매우 많은 양의 dat파일이 포함되어 있으면이 트리에서 모든 파일 을 찾는 데 필요한 시간이 늘어납니다 . 서버 쪽 /storage도 느려질 수 있습니다.

다음 명령은 이에 대한 아이디어를 제공합니다 (의 파일 및 폴더 수 계산 /storage).

find /storage | wc -l

또한 실행하는 명령 *.dat은 첫 번째 단계로 모든 파일을 검색 한 다음 chmod일치하는 모든 이름을 두 번째 단계로 한 번만 호출 합니다.

호출 chmod20 개 파일 이름 인수하는 것은 타당하지만, 800 파일 경로 인수는 조금 너무 많은 것으로된다. 시스템에는 명령 행 인수 길이에 대한 제한 사항이 있습니다 (참조 xargs --show-limits).

여러 하위 집합에서 호출을 find중단하는 명령을 직접 실행 하도록 요청 하는 것이 좋습니다 chmod. 다음 명령은 파일이 chmod들어있는 폴더 당 한 번씩 호출 dat됩니다.

find /storage -type f -name '*.dat' -execdir chmod 444 '{}' \+
  • 하나를 포크로 chmod파일을 일치 당 당신은 교체해야 \+와 함께\;
  • 당신이 인수를 추가 할 수 있습니다 진행의 더 나은 아이디어가하는 --changes--verbosechmod전화를.

0

문제를 디버깅해야합니다. 로 스크립트 생성

echo '#!/bin/sh' > bigscript.sh
find /storage/ -name "*.dat" | xargs -n 1 echo chmod 444 >> bigscript.sh
chmod u+x bigscript.sh

그런 정보 (디버깅 bigscript 넣어 편집 echo A, echo B일부 선 후, ...)를하고 오류를 찾습니다.

파일의 크기는 중요하지 않습니다. 800 개의 파일은 시간이 조금 걸립니다.

대안

간단한 대안 : try chmod -v; 이것은 chmod가 무엇을하고 있는지 알려줍니다.

다른 대안 : 실행중인 chmod (-> CHMODPID)의 PID를 찾아보십시오. ls -l /proc/$CHMODPID/fd


find /storage/ -name "*.dat" | xargs -n 1 echo chmod 444 >> bigscript.sh파일이 실행 중이고 실행 중입니다. 모든 파일에 대해 읽기 작업이 진행되고있는 이유는 무엇입니까? 먼저 읽기 op를 중지해야합니까?
Junaid Farooq

800 개의 파일은 시간이 조금 걸립니다. 진행중인 꽤 많은 "읽기 작업"이 있어야합니다. 이것은 성능이 좋지 않습니다. 디스크가 매우 느린 것처럼 들립니다. 아니면 sshfs를 사용하고 있습니까? sshfs를 통해 권한을 변경하지 말고 ssh를 사용하여 실제 서버의 셸에 로그인하고 chmod 명령을 입력하십시오.
u_Ltd.

당신이 시도하면 어떻게됩니까 ls -lR /storage/? 매달린 곳이 있습니까?
u_Ltd.

명령을 실행하면 커서가 아무 일도 발생하지 않습니다.
Junaid Farooq

실제로 매 초마다이 파일에 읽기 요청과 쓰기 요청을 보내는 systm이 있습니다.
Junaid Farooq
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.