
디렉토리 트리에서 모든 *.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
바이너리를 훨씬 적게 시작해야 하므로 이것이 더 빠른 옵션이 됩니다.