같은 이름을 가진 여러 파일을 삭제하는 방법은 무엇입니까?

같은 이름을 가진 여러 파일을 삭제하는 방법은 무엇입니까?

"이 파일을 모두 삭제하려면 어떻게 해야 합니까?"라는 이름의 txt 파일이 많이 있습니다. file1.txt file2.txt file3.txt ... file1000.txt 저는 유닉스를 처음 접하고 실수로 디렉터리의 다른 파일을 삭제할까봐 걱정됩니다.

다른 질문도 살펴봤지만 잘 모르겠습니다. 비슷한 일을 할 수 있을까요?

rm -v !("differentfile"|"anotherfile"|"otherfile"|"finalfile") 

그럼 이름이 같고 번호가 다른 파일을 모두 삭제하고 원하는 몇 개의 파일만 유지하시겠습니까? 이 줄은 내 작업 디렉터리/폴더에 있는 파일만 삭제해야 합니다. 맞나요?

rm을 사용하면서 삭제하고 싶은 특정 파일만 한 번에 삭제할 수 있는 방법이 있나요?

답변1

rm file*.txtfile이름이 문자열로 시작 하고 문자열로 끝나는 현재 디렉터리의 모든 파일이 삭제됩니다 .txt.

만약 있다면많은그 중 "매개변수 목록이 너무 깁니다." 오류가 발생합니다. 이 경우 다음을 사용할 수 있습니다.

find . -maxdepth 1 -name 'file*.txt' -delete

대신에.

이 명령은 현재 디렉터리에서 이름이 일치하는 파일을 find찾아 삭제하는 데 사용됩니다. file*.txt-maxdepth 1옵션은 (현재 디렉터리)를 제외한 모든 하위 디렉터리 find로 항목을 제한합니다..

이 명령은 파일과 디렉터리를 구분하지 않습니다(둘 rm file*.txt다 그렇지 않은 것처럼). 일반 파일만 삭제하려면 다음을 사용하세요.

find . -maxdepth 1 -type f -name 'file*.txt' -delete

find비표준 -delete및/또는 -maxdepth옵션 없이 구현 하려면 다음을 사용하세요.

find . ! -path . -prune -type f -name 'file*.txt' -exec rm -f {} +

또는 간단하지만 느린 루프를 사용할 수 있습니다.

for name in file*.txt; do
    rm -f "$name"
done

답변2

동일한 구조를 가진 다른 파일이 없으면 "file"이라는 접두어가 붙은 소위 와일드카드를 사용하십시오. 별표는 다른 문자열(빈 문자열 포함)을 나타냅니다. 먼저 "rm" 대신 "ls"(목록)를 사용하여 확인하세요.

ls file*.txt

"file" 다음의 숫자 하나 이상과 그 뒤의 다른 숫자로 범위를 좁힐 수도 있습니다.

ls file[[:digit:]]*.txt

답변3

스키마에 다른 파일이 포함될지 확실하지 않은 경우 다음을 수행할 수 있습니다.

  • 다른 (임시) 폴더로 이동하여 mv PATTERN파일 목록을 확인하고 모든 것이 정상이면 임시 폴더를 삭제하십시오.

  • 사용 rm -i PATTERN. 각 삭제를 수동으로 확인해야 합니다.

  • 실행하기 전에 또는 을 수행하여 목록이 괜찮은지 확인할 rm수 있습니다 .ls PATTERNecho PATTERN

관련 정보