2013-07-24 3 views
0

좋아요. 제가하려는 것은 매우 구체적입니다. integer.name을 기반으로 디렉토리에서 파일을 제거하는 코드가 필요합니다. 디렉토리에integer.name에 기본 파일을 제거하십시오.

파일은 상관없이 항상 어느 누구도 만들 수 있어야하는 것보다 더 이상으로 그 후 어떤 .TERM 파일을 제거 처음 .TERM 파일 &을 유지하려면 무엇을이

441.TERM (the # is actually a PID so it'll be random) 
442.TERM 

처럼 나열되지 내 스크립트에 의해,하지만 때로는 스크립팅 오전 시스템의 일부 문제로 인해 발생하지 않습니다. 나는 그것이 000.TERM 파일에 영향을 주길 원한다. 디렉토리에서 찾은 다른 파일들은 그대로있을 수있다. 따라서 디렉토리에 첫 번째 것보다 높은 정수가있는 .TERM 파일이 있으면 더 높은 정수로 .TERM 파일을 제거하십시오.

추신. .TERM은 혼란이있을 경우를 대비 한 확장 프로그램이 아닙니다.

답변

2
find /your/path -name "*.TERM" | sort -t. -k1 -n | tail -n +2 | xargs -r rm 

하는 것은 현실을 분해하자

  • find /your/path -name "*.TERM" 출력됩니다 모든 .TERM 파일의 목록을.

    ls /your/path/*.TERM을 사용할 수도 있지만 예측할 수없는 결과를 얻을 수 있습니다. (예 : 구현은 모든 소켓이 목록에서 =에 종료 될 것이다, 기본적으로 -F가있을 수 있습니다.) 구분 기호로 마침표를 사용하여 첫 번째 필드 (-k1)에 의해

  • sort 종류를 (-t.). -n은 숫자 정렬을 보장합니다 (예 : 5는 06 이전 임).

  • tail -n +2은 첫 번째 줄을 건너 뛰고 나머지

  • xargs rm 그들을 제거 rm 명령에 모든 출력 라인을 전송 반환합니다. -r은 출력 파이프가 없지만 GNU 확장자로 나열된 경우 rm을 실행하지 않습니다.

은 위의 스크립트는 사용자의 요구에 매우 강력하지만, 그들이 하나의 명령 행에 맞지 않는 디렉터리에 너무 많은 파일이있는 경우 실패 할 수 있으며, 문제가 일치하는이 경우에 당신을 얻을 수 있습니다 파일 이름에는 어떻게 든 개행 문자가 포함됩니다.

+0

괜찮아요. 테스트 해 볼게요 .--- 고마워요. 어떻게 진행되는지 알려 드리겠습니다. – Geofferey

+0

나는 그것을 작동시켰다 :-). 나는 오타가 있었어. 고맙습니다. 나는 더 많이 시험해보고 & 아무 문제도없는 것을 확인하려고합니다. – Geofferey

+0

죄송합니다. 제거 할 파일이없는 경우에도 마지막으로'-r'을 전달하는 것을 잊어 버렸습니다. 그것은 xargs의 GNU 버전에만 해당됩니다. 당신은 * nix의 다른 풍미에 있다면 여분의 농구대 나 두 개를 뛰어 넘어야합니다. –

관련 문제