특정 디렉터리 목록에서 외부 디렉터리를 제거하려면 정리 스크립트를 만들어야 합니다.
내 생각은 다음과 같이하는 것입니다.
#!/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 {} +