디렉토리 트리에서 모든 *.foo 제거

디렉토리 트리에서 모든 *.foo 제거

디렉토리 트리에서 모든 *.foo를 어떻게 제거합니까?

rm -r *.foo

작동하지 않습니다.

루프를 시도해 볼 수 있지만 재귀 확장이 필요합니다.

for x in */*/.../*.foo
    do rm $x
done

그것도 불가능합니다.

답변1

당신이 사용할 수있는 find:

find -name '*.foo' -delete

답변2

상당히 최신 버전의 bash가 있다고 가정합니다.

shopt -s globstar
rm -- **/*.foo

답변3

find를 사용해 볼 수 있습니다.

find /dir/path -name *.foo -exec rm -f {} \;

답변4

가장 쉬운 해결책 중 하나는 다음 매개변수와 함께 find 명령을 사용하는 것입니다 exec.

find /path/where/to/start/search -type f -name "*.foo" -exec rm {} \;

이것은 *.foo라는 이름의 모든 파일을 찾고 각각에 대해 rm {filename}을 수행합니다.

파일이 많으면 다음 xargs명령을 사용하는 것이 더 빠를 수 있습니다.

find /path/where/to/start/search -type f -name "*.foo" | xargs rm 

이렇게 하면 모든 파일을 찾고 distro/shell이 ​​지원하는 명령의 최대 길이까지 rm 명령 뒤에 파일 이름을 입력하므로 실행 시 다음과 같이 됩니다.

rm dir1/file1.foo dir1/file2.foo dir1/file3.foo 

이제 상상할 수 있듯이 rm바이너리를 훨씬 적게 시작해야 하므로 이것이 더 빠른 옵션이 됩니다.

관련 정보