비슷한 이름의 많은 파일을 제거하는 방법은 무엇입니까?

비슷한 이름의 많은 파일을 제거하는 방법은 무엇입니까?

file1.txt file2.txt file3.txt ... file1000.txt 이 파일을 모두 삭제하려면 어떻게 해야 합니까? 라는 이름의 txt 파일이 많이 있습니다. 나는 유닉스를 처음 접했고 실수로 내 디렉토리의 다른 파일을 삭제하는 것에 대해 걱정하고 있습니다.

다른 질문도 살펴봤지만 잘 모르겠습니다. 다음과 같이 할 수 있을까요?

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

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

rm을 사용하는 방법이 있지만 한 번에 삭제하려는 파일만 특정할 수 있나요?

답변1

rm file*.txt문자열로 시작 file하고 문자열로 끝나는 이름을 가진 현재 디렉터리의 모든 파일을 제거합니다 .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

관련 정보