2014-09-17 2 views
2

다음 bash 스크립트를 사용하여 $ days보다 오래된 파일을 제거합니다. 파일이 32000+ 이상입니다 그러나 경우linux pipe 인수 목록이 너무 길다

 
find /home/xxx/conf_* -maxdepth 0 -mindepth 0 -type d -ctime +5 -exec rm -rf {} \; 

, 나는

 
/usr/bin/find: Argument list too long 

를 얻을 수는 어떻게 20000 만 좋아하는 목록을 아래로 트림합니까? 코멘트에서

+1

'xargs'가 도움이 될 것입니다 – John3136

+0

'-exec \;은 각 파일에 대해 한 번 명령을 실행합니다. 이것이 바로'-exec \ +'가 추가 된 이유입니다. 그것은 문제가 될 수 없습니다. (또한 오류는'find'에 관한 것입니다.) –

+0

정확히 실행중인 명령입니까? '$ root'의 값은 무엇입니까? '$ root'에 32000 개 이상의 경로가 있습니까? –

답변

1

는 대답 :

귀하의 문제는 글로브 확장입니다하지만 당신은 이미 완벽하게 발견 결과, 즉 find의 임의의 수를 처리 할 수있는 도구를 사용하고 있습니다. 따라서 glob을 사용해야합니다. 대신 find에 모든 작업을 맡겨야합니다.

뭔가처럼 : 당신의 발견이 -exec \+이있는 경우 또한

find /home/xxx -maxdepth 1 -name 'conf_*' -type d -ctime +5 -exec rm -rf {} \; 

당신은 아마 대신를 사용한다 :

find /home/xxx -maxdepth 1 -name 'conf_*' -type d -ctime +5 -exec rm -rf {} \+ 

일치하는 디렉토리와 같은 많은 수를 위해 나는 처형의 대폭 감소 된 양을 상상 rm이 훨씬 더 효율적일 수 있습니다.

관련 문제