![find 없이 rm `find lib/ -name *.swp`와 동등한 것은 무엇입니까?](https://linux55.com/image/28135/find%20%EC%97%86%EC%9D%B4%20rm%20%60find%20lib%2F%20-name%20*.swp%60%EC%99%80%20%EB%8F%99%EB%93%B1%ED%95%9C%20%EA%B2%83%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
lib
마지막에 디렉토리의 모든 파일을 삭제하고 싶습니다 ..swp
다음 없이 어떻게 이 작업을 수행할 수 있습니까 find
?
rm `find lib/ -name *.swp`
답변1
조회의 좋은 점은 재귀적이라는 것입니다. 일부 최신 셸은 검색 재귀를 제공하지만 POSIX와 호환되지 않으므로 모든 곳에서 작동한다고 의존할 수는 없습니다. 다음은 bash 4.0 이상에서 실행되는 예입니다.
shopt -s globstar
for f in **/*.swp; do
rm -- "$f"
done
이미 가지고 있는 find 명령의 경우 공백이 포함된 모든 파일(예: 공백)이 삭제됩니다. 다음은 고정된 예입니다.
find lib/ -name '*.swp' -exec rm {} +
일부 버전의 경우 다음을 find
사용할 수 있습니다 -delete
.
find lib/ -name '*.swp' -delete
답변2
cd lib && ls -R | grep '\.swp$' | xargs -d '\n' rm
원본의 경우 다음과 같이 합니다.
find lib -name '*.swp' | xargs -d '\n' rm
find
결과가 반환되지 않으면 오류가 발생하지 않기 때문입니다 .
호출되는 디렉터리는 삭제할 수 없으므로 반환 하지 않으려면 \! -type d
so 를 사용할 수도 있습니다 . 디렉토리가 뒤에 있으므로 정규식과 일치하지 않으므로 내 대안과 비슷한 작업을 수행할 수 있습니다 .find
*.swp
rm
ls -RF
/