2013-05-08 2 views
2
내 많은 하위 디렉토리 중 하나에이 명령을 실행하고

: 기본적으로는 여러 디렉토리에서 명령을 실행

ls *.rst -C1 -t | awk 'NR>1' | xargs rm 

,이 한 .rst로 끝나는 모든 파일을 나열하고 나는 그들이 생성 된 시간을 기준으로 정렬 가장 최근에 만든 파일 만 필요합니다. 그런 다음 나머지 * .rst 파일을 삭제합니다.

이 명령을 실행하는 데 필요한 200 개의 디렉터리가 있습니다. find 명령을 사용하여이 명령의 디렉터리 위치를 전달하려고했지만 성공하지 못했습니다. 이 모든 디렉토리에는 inputs.in 파일이 있습니다. 나는 시도했다 :

find . -name inputs.in | xargs ls *.rst -C1 -t | awk 'NR>1' | xargs rm 

하지만 난 LS에 입력 * 한 .rst 비트, 그것은 작동하지 않은 파일 이름을 포함한 전체 경로이기 때문에 생각합니다.

빠른 픽스이지만 도움과 의견을 보내 주시면 감사하겠습니다. 부모 디렉토리에서이 명령을 실행하고 싶습니다. 감사!

답변

1

일부 추악한 방법 : 심지어 실행 발견하기 전에 대체 (globbing)이 발생하기 때문에 와일드 카드

find . -name inputs.in | xargs dirname |      \ 
    xargs -I{} -n 1 find {} -name '*.rst' | xargs ls -C1 -t | \ 
    awk 'NR>1' | xargs rm 

LS가 실패합니다.

0

당신은 GNU 병렬 설치 한 경우 :

(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash 

자세한 내용은 :이 시스템에 포장되어 있지 않은 경우

find . -name inputs.in | parallel "cd {//} && ls *.rst -C1 -t | awk 'NR>1' | xargs rm" 

이 10 초에 설치해야 인트로 동영상보기 빠른 소개 : https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

튜토리얼 (man parallel_tutorial)을 살펴보십시오. 당신은 명령 줄 그것을 사랑합니다.