소유권/권한을 기반으로 파일을 cp 또는 rm하는 방법

소유권/권한을 기반으로 파일을 cp 또는 rm하는 방법

스팸 문제가 발생한 후 중단했습니다.postfix

postfix stop

그리고 수동 검사를 통해 mailq수십만 개의 전송되지 않은 스팸 메시지가 발견되었습니다.

스팸은 로컬 호스팅 사이트 중 하나에서 전송되었으며 내가 메일 발송을 중단한 이후로 사용자가 이메일 전송을 시도하지 않은 것으로 알고 있습니다.

따라서 내 컴퓨터에 있는 이 사용자의 모든 메시지는 /var/spool/postfix/maildrop스팸으로 간주되므로 나중에 조사하기 위해 해당 메시지를 삭제하거나 다른 디렉터리로 이동하고 싶습니다.

제 생각에는특정 소유자의 모든 파일 이동(이 경우 사용자 "web2")~에서

/var/spool/postfix/maildrop

도착하다

/var/spool/postfix/temp-spam

어떻게 해야 하나요?

답변1

find예를 들어 다음과 같이 및 를 사용할 수 있습니다 xargs.

find /var/spool/postfix/maildrop -user web2 -print0 -type f | xargs -0 -I{} mv {} /var/spool/postfix/temp-spam

다음을 삽입하여 테스트할 수 있습니다 echo.

find /var/spool/postfix/maildrop -user web2 -print0 -type f | xargs -0 -I{} echo mv {} /var/spool/postfix/temp-spam

답변2

xargs를 사용하여 생성하지 않고도 find이 작업을 수행 할 수도 있습니다 -exec.

find /var/spool/postfix/maildrop -user THEUSER -type f -exec mv {} /var/spool/postfix/temp-spam \;

이동되는 파일을 보려면 -exec명령에 추가 콘텐츠를 추가할 수 있습니다.

find /var/spool/postfix/maildrop -user THEUSER -type f -exec ls -lah {} \; -exec mv {} /var/spool/postfix/temp-spam \;

답변3

표준 명령find메타데이터(이름, 권한 등)를 기반으로 파일을 일치시키고 작업할 수 있습니다. 디렉토리를 재귀적으로 순회합니다. 기본 구문 find다음에는 탐색할 디렉터리, 일치 기준, 선택적으로 실행할 명령이 옵니다(지정된 명령이 없으면 find일치하는 이름이 인쇄됩니다).

find /var/spool/postfix/maildrop -user web2 -exec mv -t /var/spool/postfix/temp-spam {} +

mv -t /var/spool/postfix/temp-spam …그러면 일치하는 파일에 대한 명령이 실행됩니다. {}일치하는 모든 파일의 목록으로 대체됩니다( 목록이 너무 길면 여러 번 find실행됩니다 ).mv

옵션은 GNU(Linux/Cygwin) 확장 -t입니다 . mv해당 파일이 없는 시스템에서는 먼저 이동하려는 파일 이름을 전달한 다음 대상을 전달해야 합니다. 이 -exec … +작업에서는 명령줄 끝에 파일 이름을 전달하는 것만 허용하므로 다른 방법을 사용해야 합니다.

find /var/spool/postfix/maildrop -user web2 -exec mv {} /var/spool/postfix/temp-spam \;

( mv각 파일마다 별도로 호출됨)

find /var/spool/postfix/maildrop -user web2 -exec sh -c 'mv "$@" "$0"' /var/spool/postfix/temp-spam {} +

(중간 쉘을 사용하여 원하는 순서로 매개변수를 가져옵니다.)

zsh를 사용한다면 다음을 사용할 수 있습니다.글로벌 예선와 동일한 작업을 수행합니다 find. 여기서는 u사용자가 소유한 파일을 일치시키는 데 사용되는 플래그입니다.

mv /var/spool/postfix/maildrop/*(u:web2:) /var/spool/postfix/temp-spam

( find위 명령과 달리 하위 디렉터리로 재귀적으로 들어가지 않습니다. 여기서는 필요하지 않지만, 필요한 경우 **/경로에 "0개 이상의 하위 디렉터리"를 삽입합니다. 예를 들어 /var/spool/postfix/maildrop/**/*(u:web2:).)

관련 정보