IT

재귀 적으로 파일 제거

lottoking 2020. 6. 22. 07:31
반응형

재귀 적으로 파일 제거


Mac에서 Linux 서버로 파일을 옮긴 후에 얻는 성가신 ._ 및 .DS_Store 파일을 제거하는 솔루션이 있습니까?

시작 디렉토리를 지정하고 그대로 두시겠습니까? / var / www / html / down ...처럼


디렉토리로 변경하고 다음을 사용하십시오.

find . -name ".DS_Store" -print0 | xargs -0 rm -rf
find . -name "._*" -print0 | xargs -0 rm -rf

테스트되지 않았으므로 먼저 xargs없이 시도하십시오!

먼저 디렉토리로 변경하는 대신 찾기 후 마침표를 디렉토리로 바꿀 수 있습니다.

find /dir/here ...

find /var/www/html \( -name '.DS_Store' -or -name '._*' \) -delete

최신 findutils는 다음을 지원합니다 -delete.

find . -name ".DS_Store" -delete

-print삭제 목록을 얻으려면 추가하십시오 .

최신 POSIX 시스템을 사용하는 경우 명령이 작동합니다. 적어도 그것은 OS X 10.8에서 작동하며 macOS 10.12 (Mojave)에서 테스트 한 다른 사람들에게는 작동합니다.

@ X-Istence의 게시물에 대한 의견에서 @ephemient에게 감사의 말을 전합니다 (자신의 답변을 보증하는 데 도움이되었다고 생각했습니다).


간단한 명령 :

rm `find ./ -name '.DS_Store'` -rf
rm `find ./ -name '._'` -rf

행운을 빕니다!


cd /var/www/html && find . -name '.DS_Store' -print0 | xargs -0 rm
cd /var/www/html && find . -name '._*' -print0 | xargs -0 rm

bash 대신 zsh로 전환 할 수 있습니다. **를 사용하면 디렉토리 트리의 어느 곳에서나 파일을 일치시킬 수 있습니다.

$ rm /var/www/html/**/_* /var/www/html/**/.DS_Store

다음과 같이 결합 할 수도 있습니다.

$ rm /var/www/html/**/(_*|.DS_Store)

Zsh에는 bash가 부족한 다른 많은 기능이 있지만 그중 하나만으로도 가치가 있습니다. cygwin 및 OS X뿐만 아니라 대부분의 (아마도 모든) Linux 배포판에서 사용할 수 있습니다.

zsh 사이트 에서 자세한 정보를 찾을 수 있습니다 .


find . -name "FILE-TO-FIND"-exec rm -rf {} \;

"Thumbs.db"를 재귀 적으로 삭제하는 예;

find . -iname "Thumbs.db" -print0 | xargs -0 rm -rf

다음으로 확인하십시오.

find . -iname "Thumbs.db"

현재 경로 안에 "Thumbs.db"가있는 항목은 표시되지 않습니다.


이 답변에 -print를 추가하여 제거 대상을 확인하는 것이 좋습니다

find /var/www/html \( -name '.DS_Store' -or -name '._*' \) -delete -print

Bash 4.0 ++이 있다면

#!/bin/bash
shopt -s globstar
for file in /var/www/html/**/.DS_Store /var/www/html/**/._ 
do
 echo rm "$file"
done

몇 가지 참고할 사항 :

'-delete'는 재귀 적이 지 않습니다. 따라서 .TemporaryItems (폴더)에 파일이 있으면 명령이 실패합니다.

macs가 만든 성가신 파일이 많이 있습니다. .DS_Store ._. DS_Store .TemporaryItems .apdisk

이 하나의 명령은 모든 것을 다룹니다. 여러 개의 일치 항목에 대해 찾기 실행을 반복하여 저장하지 않습니다.

find /home/foo \( -name '.DS_Store' -or -name '._.DS_Store' -or -name '._*' -or -name '.TemporaryItems' -or -name '.apdisk' \) -exec rm -rf {} \;

이것은 또한 작동합니다 :

sudo rm -rf 2018-03-*

여기에 형식이 2018-03-03 인 파일을 삭제하십시오 (다른 것)

단순하게 유지

참고 URL : https://stackoverflow.com/questions/2016844/recursively-remove-files

반응형