40000개 넘는 파일 한꺼번에 삭제할 때 /bin/rm: 인수 명단이 너
글쓴이: bjwj / 작성시간: 금, 2004/02/13 - 9:01오후
<시스템 사양>
사용배포본 레드햇 9.0
CPU p4-2.4G
RAM 1G
손에 들고 있는 리눅스 안내서를 뒤적이는 것 외엔 전혀 문외한인 초보입니다.
제로보드 드림퀘스트 갤러리 게시판을 쓰다보니
data 폴더에 임시파일이 많이 생겨서 삭제하려는데 한꺼번에 삭제되지 않고 조금씩 나눠서(?) 삭제해야만 합니다.
ssh로 로긴하여 root 상태에서
[root #] rm -rf thumb_temp_*
라고 입력하면
-bash /bin/rm 인수 명단이 너무 김
이라고만 출력되지 삭제되지 않습니다.
임시파일 파일명은 한결같이 "thumb_temp_"로 시작되며 뒷부분은 "A"와"a" 부터 "Z"와"z"까지 이어집니다.
할수없이
[root #] rm -rf thumb_temp_A*
라고 입력해야 지워집니다.
이대로라면 제실력으로는
[root #] rm -rf thumb_temp_z*
까지 입력해야만 다 지워지겠죠.
게시물 수도 얼마되지 않는데 임시 파일 수는 대략 42000개가 넘는군요. 용량은 41Byte정도지만 신경거슬려서 싹 지우고 싶은데 현재로선 이걸 일일이 대소문자 입력해서 지워도 52번 명령해야 하네요...
참고로 시스템에 엑스윈도우는 설치하지 않았습니다. 오로지 콘솔에서만 작업해야합니다.
한꺼번에 지울 수 있는 방법, 꼭 알고 싶습니다.
Forums:
find를 사용해 보세요.
find . -name thumb_temp_\* -exec rm -f {} \;
라고 하시면 지우실수 있습니다.
감사합니다.
삭제했습니다.
larycho 님
감사합니다. 초보에게 매우 유익했습니다.
솔직히 명령어 내용이 어찌된 영문인지는 앞으로도 오랫동안 모르겠습니다. ^^;
man find 하신 뒤에-name 과-exec 를 설명한
man find 하신 뒤에
-name 과
-exec 를 설명한 부분을 잘 보시면 될 것 같네요.
(사실 저도 방금 이해했어요. ^^; )
좋은 것 알아갑니다.
----
It is essential, if man is not to be compelled to have recourse, as a last resort, to rebellion against tyranny and oppression, that human rights should be protected by the rule of law.
[Universal Declaration of Human Rights]
Re: 감사합니다.
find . -name "asdf*" -exec echo {} \;
라고 하면
-name 뒤에 해당하는 파일들을 . (현재 디렉토리)에서 찾아서
-exec 이후의 내용을 실행시킵니다. 이때 {}자리에 파일이름이 들어갑니다.
원래 질문하신 분처럼하면 인자 40000개짜리 rm을 한번 실행시키는 거고,
find명령으로 하면 인자 1개짜리 rm을 40000번 실행시킵니다.
ls thumb_temp_* | xargs -n100 rm -f
ls thumb_temp_* | xargs -n100 rm -f
------------------------------------------------------------------------------------------------
Life is in 다즐링
Unix 명령은 거의 프로그래밍 수준이지요.ls /tmp/*
Unix 명령은 거의 프로그래밍 수준이지요.
ls /tmp/*
와
cd /tmp; ls
이 두가지는 상당히 다른 경로로 파일 검색이 일어납니다.
전자는 /tmp/* 를 shell 이 먼저 분석하여 * 에 해당하는 파일을 확장한뒤 ls 에 인자로 넘깁니다.
후자는 단지 ls가 현재 디렉토리를 열고 하나씩 스캔하지요.
따라서 shell이 * 에 대한 것을 분석하고 command line에 넘길 때, 그 용량이 shell이 넘길 수 있는 길이안에서만 가능합니다.
만약 bash, sh 를 쓰신다면,
set -f
하고 나서 실행하면, shell 이 * 에 대한 확장을 하지 않기 때문에 '*' 문자 그대로 전달되어 ls가 '*'라는 파일이 없다고 나옵니다.
set +f 로 풀어주시고... 확인해보셔요.
넘기는 파일 개수가 제한이 있는것이 아니라
길이기 때문에
ls /tmp/* 보다는
cd /tmp; ls *
가 훨씬 적은 량을 ls에 전달하게 되겠지요.
참고하세요....
---
http://coolengineer.com
이런 질문과 답글을 볼때마다 리눅스의 무한한 변용성(?)을 엿볼수 있
이런 질문과 답글을 볼때마다
리눅스의 무한한 변용성(?)을 엿볼수 있다 생각합니다.
find와 rm , ls와 xargs를 결합해서
(pynoos님말씀처럼)내가 원하는 바를
프로그래밍 처럼 할 수 있다는 것에
감탄하지 않을 수 없습니다 ㅠ_ㅠ
Always
댓글 달기