정의되지 않은 다른 모든 디렉토리를 제거하십시오.

정의되지 않은 다른 모든 디렉토리를 제거하십시오.

특정 디렉터리 목록에서 외부 디렉터리를 제거하려면 정리 스크립트를 만들어야 합니다.

내 생각은 다음과 같이하는 것입니다.

 #!/bin/ksh find /data/${USER}/SAS/ -type d ! -name 'SE' | find /data/${USER}/SAS/ -type d ! -name 'Rejet' | find /data/${USER}/SAS/ -type d ! -name 'Acq' | find /data/${USER}/SAS/ -type d ! -name 'Archiv' | find /data/${USER}/SAS/ -type d ! -name 'Cloture' | find /data/${USER}/SAS/ -type d ! -name 'Emis' | find /data/${USER}/SAS/ -type d ! -name 'Ident' | find /data/${USER}/SAS/ -type d ! -name 'Irr*' | find /data/${USER}/SAS/ -type d ! -name 'Recep*'

그렇다면 -type f -exec rm {} \;정말 무엇을 해야할지 모르겠습니다.

답변1

/data/${USER}/SAS/사전 정의/지정된 목록에 있는 폴더를 제외한 경로의 모든 폴더를 삭제하려면 다음 최적화 find방법을 사용하십시오.

find /data/${USER}/SAS/ -type d -regextype posix-egrep \
    ! -regex ".*/(SE|Rejet|Acq|Archiv|Cloture|Emis|Ident|Irr.*|Recep.*)" \
    ! -name "SAS" -exec rm -rf {} \;

답변2

을 사용하고 있으므로 ksh문제가 될 수 있습니다.

(FIGNORE='@(.|..)'; cd /data/"$USER"/SAS/ && 
   echo rm -rf -- !(SE|Rejet|Acq|Archiv|Cloture|Emis|Ident|Irr*|Recep*)/)

echo(만족하면 삭제)

그러면 이 목록과 일치하는 디렉터리를 제외한 모든 디렉터리가 삭제됩니다(디렉토리가 아닌 파일은 남김).

FIGNORE숨겨진 디렉터리를 제거하지 않으려면 이 섹션을 삭제하세요.

또한 디렉토리에 대한 심볼릭 링크도 고려합니다(구현에 따라 rm심볼릭 링크를 제거하거나콘텐츠목표).

이를 통해 find다음을 수행할 수 있습니다.

cd /data/"$USER"/SAS &&
  find . ! -name . -prune \
    ! -name SE \
    ! -name Reject \
    ! -name Acq \
    ! -name Archiv \
    ! -name Cloture \
    ! -name Emis \
    ! -name Ident \
    ! -name 'Irr*' \
    ! -name 'Recep*' -type d -exec echo rm -rf {} +

관련 정보