"이 파일을 모두 삭제하려면 어떻게 해야 합니까?"라는 이름의 txt 파일이 많이 있습니다. file1.txt file2.txt file3.txt ... file1000.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 PATTERN
echo PATTERN